网站建设状况,手机的网站建设目标是什么意思,天津低价做网站,网站建设相关法律法规一、Cookie
1、什么是Cookie 1、Cookie实际上是一小段的文本信息#xff0c;是一种keyvalue形式的字符串。客户端请求服务器#xff0c;如果服务器需要记录该用户状态#xff0c;就使用response向客户端浏览器颁发一个Cookie。客户端会把Cookie保存起来。 2、当浏览器再请求…一、Cookie
1、什么是Cookie 1、Cookie实际上是一小段的文本信息是一种keyvalue形式的字符串。客户端请求服务器如果服务器需要记录该用户状态就使用response向客户端浏览器颁发一个Cookie。客户端会把Cookie保存起来。 2、当浏览器再请求该网站时浏览器把请求的网址连同该Cookie一同提交给服务器。服务器检查该Cookie以此来辨认用户状态。服务器还可以根据需要修改Cookie的内容。 3、cookie 只存储用户的身份标识如用一串字符串表示的 userid服务器端通过 session 存储用户信息然后用 userid 去查找对应的用户信息。 4、Cookie是客户端浏览器存储数据的一种机制键值对结构可以存储身份信息也是可以存储关键的信息都是程序员自定义 5、Cookie是浏览器提供的一种让程序员在本地存储数据的能力让数据在客户端这边更持久化。 2、会话Cookie和持久Cookie 1、会话cookie内存式Cookie 若不设置过期时间则表示这个cookie的生命期为浏览器会话期间关闭浏览器窗口cookie就消失。这种生命期为浏览器会话期的cookie被称为会话cookie。会话cookie一般不存储在硬盘上而是保存在内存里当然这种行为并不是规范规定的。 2、持久Cookie硬盘式Cookie 若设置了过期时间浏览器就会把cookie保存到硬盘上关闭后再次打开浏览器这些cookie仍然有效直到超过设定的过期时间。存储在硬盘上的cookie可以在浏览器的不同进程间共享。这种称为持久Cookie。 3、Cookie具有不可跨域名性
你在逛B站时生成的cookie不会被带到CSDN的cookie中。
4、Cookie的工作原理 浏览器里面存的Cookie都是从服务器的响应“报头”里面的 set-cookie 字段中来的每个 set-cookie 字段里面都包含一个Cookie 这样的键值对浏览器拿到响应之后就会把 set-cookie中的内容保存到本地而 set-cookie 就是程序员自己在服务器中构造填写的。 注意 1、修改和删除cookie 要想修改Cookie只能使用一个同名的Cookie来覆盖原来的Cookie达到修改的目的。修改、删除Cookie时新建的Cookie除value、maxAge之外的所有属性例如name、path、domain等都要与原Cookie完全一样。否则浏览器将视为两个不同的Cookie不予覆盖导致修改、删除失败。从客户端读取Cookie时包括maxAge在内的其他属性都是不可读的也不会被提交。浏览器提交Cookie时只会提交name与value属性。maxAge属性只被浏览器用来判断Cookie是否过期。 2、配置域名 domain参数必须以点(“.”)开始。另外name相同但domain不同的Cookie是两个不同的Cookie。如果想要两个域名完全不同的网站共有Cookie可以生成两个Cookiedomain属性分别为两个域名输出到客户端。 3、配置允许访问Cookie的路径 设置为“/”时允许所有路径使用Cookie。path属性需要使用符号“/”结尾。 4、配置cookie的安全属性 secure属性并不能对Cookie内容加密因而不能保证绝对的安全性。如果需要高安全性需要在程序中对Cookie内容加密、解密以防泄密。如果不希望Cookie在HTTP等非安全协议中传输可以设置Cookie的secure属性为true。浏览器只会在HTTPS和SSL等安全协议中传输此类Cookie。 二、Session
1、什么是Session 1、Session是另一种记录客户状态的机制不同的是 Cookie保存在客户端浏览器中而Session保存在服务器上。客户端浏览器访问服务器的时候服务器把客户端信息以Session记录在服务器上。 2、session 运行在服务器端当客户端第一次访问服务器时可以将用户的登录信息保存当用户访问其他界面时可以通过 session 判断用户的登录状态做出提示。 3、Session是服务器存储数据的一种机制键值对结构的主要用来 存储身份相关的信息。 2、Session的工作原理
Session在调用getSession()或者getSession(true)底层都会自动实现Set-Cookie方法这意味着使用 session会生成cookie存放JSESSIONID。 【getSession()或者getSession(true) 返回的是keyvalue的cookie键值对】 注意 1、getSession(Boolean) 如果参数是true就会看看请求中是否会有 SessionId以及SessionId合不合法。 1、如果有SessionId就会根据这个SessiuonId找到对应 HttpServlet 对象查hash表在服务器这边以一个hash表的形式把若干个Session给组织起来 2、如果没有SessionId那么服务器就会生成一个SessionId同时创建一个HttpServlet 对象把这一组键值对再插入到服务器管理的Session的hash表中同时把 sessionId通过Set-cookie 在响应中返回给客服端如果参数是false也是会看请求中是否有SessionId以及是否合法如果有SessionId直接找到对应的 HttpServlet对象查询各方面的信息如果没有SessionId那么直接返回就是null 2、保存session id的方式 1.使用Cookie进行保存默认机制2.URL重写3.表单隐藏字段 3、Session的生命周期和有效期设置 Session保存在服务器端。为了获得更高的存取速度服务器一般把Session放在内存里。每个用户都会有一个独立的Session。如果Session内容过于复杂当大量客户访问服务器时可能会导致内存溢出。因此Session里的信息应该尽量精简。由于会有越来越多的用户访问服务器因此Session也会越来越多。为防止内存溢出服务器会把长时间内没有活跃的Session从内存删除。这个时间就是Session的超时时间。如果超过了超时时间没访问过服务器Session就自动失效了。注意 session-timeout 参数的单位为分钟而setMaxInactiveInterval(int s)单位为秒。 疑惑对于Session和Cookie的关系 回答Cookie是在客户端存放Session的调用Session本身就会用到Cookie工作原理如果不想用也可用另外两种方式实现不建议最好使用Cookie。
3、Cookie和Session的区别 1、cookie数据存放在客户的浏览器上session数据放在服务器上。 2、cookie不是很安全别人可以分析存放在本地的cookie并进行cookie欺骗考虑到安全应当使用session。 3、session会在一定时间内保存在服务器上。当访问增多会比较占用你服务器的性能考虑到减轻服务器性能方面应当使用cookie。 4、单个cookie保存的数据不能超过4K很多浏览器都限制一个站点最多保存20个cookie。 5、可以考虑将登陆信息等重要信息存放为session其他信息如果需要保留可以放在cookie中。 三、Redis
1、什么是Redis RedisRemote Dictionary Server )即远程字典服务是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库并提供多种语言的API。 2、为什么要用RedisSession为什么要结合Redis使用
实际的项目中需要部署在多台服务器上防止某台服务器的压力过大避免出现系统性能问题或宕机。
eg1.举例说明只用session和cookie 对于登录系统用户主要访问我们nginx的代理服务器请求系统。 如果用户第一次请求被分配到了服务器A创建的Session对象就是在A的内存中返回给用户的Cookie是JSESSIONIDabc123用户第二次请求用Cookie找到值为abc123的session就不需要再次登录了但是第二次请求分配到了服务器B拿着abc123在B的内存中根本没有就会出现请求失败用户就得再次输入密码才能登录用户体验就很差。
eg2.举例说明使用redis实现session共享 加入redis后用户第一次请求的session被存放到Redis中即使第二次请求到了服务器B也可以从redis查到对应的session。 PS感觉Redis就是单纯的替代了每个服务器存储session实现共享。 Session为什么要结合Redis使用 分布式数据存储 Session数据保存在内存中如果有多个Web服务器组成的集群那么Session数据就会分散在各个服务器上导致Session数据无法共享。Redis的主要作用是支持分布式数据存储因此可以解决这个问题让多个Web服务器上的Session数据共享。高性能 Redis是一种高性能的内存数据库它可以处理大量的读写请求使得Session数据的读写速度大大提高从而提升Web应用程序的性能。支持持久化存储 Redis支持将数据持久化到磁盘中确保Session数据不会因为服务器宕机或关机而丢失。这样可以最大程度上保障用户数据的安全性和可靠性。支持高并发 由于Redis的高并发性能可以支撑大量用户同时访问Web应用程序从而提高并发用户数的处理能力减少了Web应用程序出现瓶颈的风险。强大的扩展能力 Redis支持丰富的数据结构和功能可以根据需要扩展和定制Session管理的功能让Session管理更加灵活和高效。 3、简单扩展
3.1 什么叫做缓存穿透如何解决 是指缓存和数据库中都没有数据导致所有的请求都落到数据库上。数据库短时间承受大量的请求而崩掉 解决 1缓存取不到数据库也取不到的数据 设置为key—null 的方式 2布隆过滤器将所有可能存在的数据哈希到一个足够大的bitmap 中去它告诉你存在的话不能全信其实有可能是不存在的不过它他要是告诉你不存在的话那就一定不存在 3.2 什么叫做缓存击穿如何解决 高并发查询同一条数据但是redis 中的数据过期了。导致请求发送到了数据库造成缓存击穿 解决 1设置热点数据永不过期 2使用互斥锁。分布式情况下使用分布式的锁 3.3 什么叫做缓存雪崩如何解决 缓存同一时间大面积的失效后面的请求都会落到数据库上造成数据库短时间内承受大量的数据请求 解决 缓存数据的过期时间随机设置防止同一时间大量的数据过期的情况发生 3.4 Redis查询为什么很快 虽然redis是单线程程序但是因为它是纯内存数据库只操作内存而我们的mysql是硬盘操作并且使用了异步非阻塞IO单线程多路复用IO模型 3.5 什么是多路复用IO 当一个请求访问redis时redis去取数据给这个请求的时间段内请求的入口不是阻塞的也就是说依旧可以接收请求直到redis取到数据再一一响应这些请求。 多路多个socket连接复用复用一个线程 多路I/O复用技术可以让单个线程高效的处理多个连接请求尽量的减少网络IO的时间消耗。 3.6 为什么单线程查询速度能这么快 首先单线程肯定不可能比多线程快但是单线程的模式避免了数据并发安全因为多线程的数据并发安全所以出现了各种锁。那么这个时候我们单线程的优点就来了不需要考虑数据并发的安全也不用出现频繁的线程调度切换上下文。 3.7 上下文是什么 线程每次执行时都需要将数据从主内存读入到工作内存中。当线程阻塞时工作内存的数据就需要被放到线程上下文中其实线程上下文就是一个存储结构当线程被唤醒的时候就去读取上下文的内容就称为切换上下文。 3.8 主内存和工作内存是什么 主内存Main Memory是用于计算机内部存储和访问数据的一种硬件设备通常指的是随机访问存储器(RAM)。它在计算机启动时被激活并且一直运行到计算机关闭。主内存通常是存放程序和数据的地方因此也被称为程序级存储器Programmable Memory。在主内存中数据存储在内存单元中每个内存单元具有一个唯一的地址。 工作内存Working Memory通常是指线程Thread执行时使用的缓存区域也被称为线程的本地内存Thread Local Memory。每个线程都有自己的工作内存线程的工作内存中存储了该线程独享的变量副本Copy工作内存中的变量副本会被操作后写回主内存。多个线程之间可以访问共享的数据如果一个线程要访问共享的变量它会先将变量从主内存复制到自己的工作内存中然后对变量进行操作最后将变量的值写回到主内存中。 需要注意的是多个线程互相之间不能看到各自工作内存中存储的数据这些数据只会在各自的工作内存和主内存之间传递。因此为了确保线程间的数据一致性Java 提供了一些同步机制如 synchronized 关键字和 Lock 接口当一个线程需要访问共享的数据时需要先获取锁保证其他线程暂时无法修改该数据然后才能进行操作。这些同步机制确保了数据在多个线程之间的可见性和一致性避免了并发访问时的数据竞争和错误。 read读取作用于主内存变量把一个变量值从主内存传输到线程的工作内存中以便随后的load动作使用 load载入作用于工作内存的变量它把read操作从主内存中得到的变量值放入工作内存的变量副本中。 use使用作用于工作内存的变量把工作内存中的一个变量值传递给执行引擎每当虚拟机遇到一个需要使用变量的值的字节码指令时将会执行这个操作。 assign赋值作用于工作内存的变量它把一个从执行引擎接收到的值赋值给工作内存的变量每当虚拟机遇到一个给变量赋值的字节码指令时执行这个操作。 store存储作用于工作内存的变量把工作内存中的一个变量的值传送到主内存中以便随后的write的操作。 write写入作用于主内存的变量它把store操作从工作内存中一个变量的值传送到主内存的变量中。 本文参考了以下文章他们的描述更加详细 Cookie 和 Session Cookie和Session的区别面试必备 Cookie和Session详解 Session和Cookie的区别与联系 【nodejs学习笔记】用户登录相关cookie、session 和 redis的使用和优缺点 Node.js坑点杂谈二快速弄懂session和redis session redis 实现session 共享原理和原因 session与cookie的理解sso、redis redis详解(全) Redis 详解