cookie和session的区别
一、为什么需要cookie和session?
会话:客户端打开与服务器的连接发出请求到服务器响应客户端请求的全过程称之为会话。
http协议是“无状态”协议,不能保存用户信息,需要判断是否是同一个用户,需要会话跟踪。cookies和session都是用来跟踪浏览器用户身份的会话方式,但两者应用场景不一样。
客户端访问服务器的流程如下:
• 首先,客户端发送一个HTTP请求到服务器端
• 服务器端接受客户端请求后,建立一个session,并发送一个http响应到客户端,响应头中包含Set-Cookie头部,该头部包含了sessionId,浏览器接收到服务器返回的 sessionID 信息后,会将此信息存入到 Cookie 中,同时 Cookie 记录此 sessionID 属于哪个域名。
• 在客户端发起的第二次请求中,请求会自动判断此域名下是否存在 Cookie 信息,如果存在自动将 Cookie 信息添加在请求头中,也发送给服务端
• 服务器接收请求,分解Cookie,获取 SessionID,再根据 SessionID 查找对应的 Session 信息,如果没有找到说明用户没有登录或者登录失效,如果找到 Session 证明用户已经登录可执行后面操作,返回响应给客户端
二、cookie和session是什么?
Cookie 是Web 服务器发送给客户端(浏览器)的一小段信息,客户端请求时可以读取该信息发送到服务器端,进而进行用户的识别。对于客户端的每次请求,服务器都会将 Cookie 发送到客户端,在客户端可以进行保存,以便下次使用。
Session 代表着服务器和客户端一次会话的过程。每一个用户都有一个不同的 session,各个用户之间是不能共享的,是每个用户所独享的,在 session 中可以存放信息。Session 的实现依赖于 Cookie,如果 Cookie 被禁用,那么 session 也将失效。
三、Cookie 和 Session 有什么不同?
• 作用范围不同,cookie一般用来保存用户信息,数据保存在浏览器端;session主要作用是通过服务器端记录用户的状态,数据保存在服务器端。典型的例子是购物车,添加商品到购物车,HTTP无状态协议,系统不知道是哪个用户操作的,服务器给用户创建特定的session之后就可以标识这个用户了。
• 存取方式的不同,Cookie 只能保存 ASCII,Session 可以存任意数据类型,一般情况下我们可以在 Session 中保持一些常用变量信息,比如说 UserId 等。
• 有效期不同,Cookie 可设置为长时间保持,比如我们经常使用的默认登录功能,Session 一般失效时间较短,客户端关闭或者 Session 超时都会失效。
• 隐私策略不同,Cookie 存储在客户端,比较容易遭到不法获取,早期有人将用户的登录名和密码存储在 Cookie 中导致信息被窃取;Session 存储在服务端,安全性相对 Cookie 要好一些。
• 存储大小不同, 单个 Cookie 保存的数据不能超过 4K,Session 可存储数据远高于 Cookie。
四、禁用cookie后如何保障整个机制的正常运转?
第一种,在每次请求中都携带一个 SessionID 的参数放入URL
第二种,Token 机制。Token 的意思是“令牌”,是服务端生成的一串字符串,作为客户端进行请求的一个标识。随机且无状态,用户信息都被加密到token中,服务器收到token后解密就可知道是哪个用户。需要开发者手动添加。
token 的认证流程与cookie很相似:
• 用户登录,成功后服务器返回Token给客户端。
• 客户端收到数据后保存在客户端
• 客户端再次访问服务器,将token放入headers中
• 服务器端采用filter过滤器校验。校验成功则返回请求数据,校验失败则返回错误码