为什么需要状态保持
Web应用程序使用HTTP协议作为传输数据的标准协议,而HTTP协议是无状态协议,即一次请求对应一次响应,响应结束后连接即断开,同一个用户的不同请求对于服务器端来讲并不会认为这两个请求有什么关联性,并不会以此区分不同的客户端。但实际情况中还是需要服务器端能够区分不同的客户端以及记录与客户端相关的一些数据,所以状态管理能够做到不同客户端的身份识别。
cookie
Cookie是服务器发送到用户浏览器并保存在本地的一小块数据(最大4k),一般被加密,它会在浏览器下次向同一服务器再发起请求时被携带并发送到服务器上。
一个cookie拥有如下属性:
name:确定一个Cookie。路径可能不同
value:不能存中文
可选属性:比如注释、路径和域限定符
过期时间
版本号
工作原理:
浏览器第一次访问网站,服务器会生成cookie并发送给浏览器
浏览器保存cookie信息
浏览器再次访问网站,会携带相应的cookie
服务器验证cookie
session
Session 代表着服务器和客户端一次会话的过程。Session 对象存储特定用户会话所需的属性及配置信息。这样,当用户在应用程序的 Web 页之间跳转时,存储在 Session 对象中的变量将不会丢失,而是在整个用户会话中一直存在下去。当客户端关闭会话,或者 Session 超时失效时会话结束。
session也是key--value型,与cookie区别在于cookie的key--value都存储在客户端,而session则将value存储在服务器上。另外,value可以存储更复杂的数据比如对象等信息。
工作原理:
浏览器第一次访问网站,服务器会生成session的key--value,并且保存在服务器一份(集群、内存、数据库、文件都可以),key则以cookie的方式返回给浏览器
浏览器保存session的key
浏览器再次访问网站,会携带相应的key
服务器通过key查询value是否存在来验证合法性