Cookie与Session流程及区别
目录
1:实现状态保持的原理
登录一个网站时常常会涉及到用户登录的状态保持,来使得用户获得更好的体验。那么cookie和session就是为了实现状态保持的
Cookie
- Cookie是HTTP协议的规范之一,它是服务器和客户端之间传输的小数据。
- Cookie就是服务器保存在客户端的数据,是一个键值对
- Cookie通过请求头和响应头在服务器与客户端之间传输,大小限制在4KB之内;
实现流程:
- 用户在登录时向后端服务器发送post请求,服务器接受请求,检验请求参数无误后,处理登录业务逻辑,返回响应。
此时服务器端生成对应的cookie字符串,响应到前端浏览器 - 浏览器本地保存cookie值
- 在登录后用户再向服务器发送请求,则带着浏览器本地保存的cookie值,发送给服务器
- 服务器在接受到请求后,获取到请求参数(里面带有cookie),服务器将获取的cookie值跟之前服务器生成的cookie比较,发现cookie值相同,则默认时同一个用户再访问服务器,从而实现用户登录状态保持。
Session
session是依赖Cookie实现的。session是服务器端对象
session对象是保存在服务器端的,而sessionId是通过Cookie保存在客户端的。
因为Cookie不能在多个浏览器中共享,所以session也不能在多个浏览器中共享。也就是说,使用IE登录后,再使用FireFox访问服务器还是没有登录的状态。
而且同时打开多个相同浏览器的窗口,是在使用同一session。如果你使用的是老浏览器,例如IE6,那么就会每个窗口一个session。
实现流程:
- 当用户第一次使用session时(表示第一次请求服务器),服务器会创建session,并创建一个Cookie,在Cookie中保存了session的id,发送给客户端。这样客户端就有了自己session的id了。但这个Cookie只在浏览器内存中存在,也就是说,在关闭浏览器窗口后,Cookie就会丢失,也就丢失了sessionid。
- 当用户第二次访问服务器时,会在请求中把保存了sessionid的Cookie发送给服务器,服务器通过sessionid查找session对象,然后给使用。
- 当用户关闭了浏览器窗口后,再打开浏览器访问服务器,这时请求中没有了sessionId,那么服务器会创建一个session,再把sessionId通过Cookie保存到浏览器中,也是一个新的会话开始了。
- 原来的session会因为长时间无法访问而失效。session默认失效时间是半小时,服务器关闭时session可能也会关闭
cookie和session的本质区别
- cookie和session都是基于键值对的字符串;
- 俩个都是都由后端服务器生成的;
- cookie字符串保存在客户端浏览器中,session值保存在服务器中,session比cookie更安全。
(cookie相当于明文,而session类似于密文,是由后端服务器经过编码后的一段无序字符串) - session是key-value格式的数据,则它的键session_id保存在cookie中的,值session_data保存在服务器,通过key来取到value;