Cookie和Session的区别

2020-01-13  本文已影响0人  Eafrey

简短版

详细版

Cookie

HTTP 协议是无状态的,为了让 HTTP 协议尽可能简单,使得它能够处理大量事务。HTTP/1.1 引入 Cookie 来保存状态信息。

Cookie 是服务器发送到浏览器并保存在本地的一小块数据(最大的存储容量是4KB),浏览器在之后向同一个服务器请求时会携带 Cookie 里存储的信息,用于标识请求是否来自与同一浏览器。

除了能接收服务器端传输的 Cookie 之外,浏览器也可以通过 document.cookie 创建新的 Cookie,同时也能通过该属性访问非 HttpOnly (标记为 HttpOnly 的 Cookie 不能被 js 脚本调用,可以在一定程度上避免跨站脚本攻击(XSS)) 的 Cookie。

Cookie 按照其生命周期通常分为两种

  1. 会话期 Cookie:浏览器关闭之后会自动删除,仅在会话器有效
  2. 持久性 Cookie:指定了过期时间和有效期的 Cookie

Session

Session 和 Cookie 类似,都是用来存储一些用户的信息。Session 存储在服务器端,存储在服务器端会让这些信息更加安全。Session 可以存储在服务器的内存、数据库和文件当中,也可以存在 Redis 这种内存型数据库中,效率会更高。

每一个 Session 都有一个唯一的 Session ID,用于查找、回溯存储的值。Session 被创建时,它的 Session ID 会以 Cookie 的形式返回给浏览器,如果浏览器不支持或者禁用了 Cookie,则会把 Session ID 放在 URL 参数里进行传递。

Session 维护用户登录信息的例子
  1. 用户登录,提交用户名和密码的表单,放到 HTTP 请求报文,发送登录的 HTTP 请求
  2. 服务器验证用户名和密码,如果校验成功,则把用户信息存储在 Redis 中,用户信息在 Redis 中的 Key 即为 Session ID
  3. 服务器返回 HTTP 响应,并在响应头中将 Session ID 作为Cookie 的值返回给客户端,客户端收到请求之后将 Session ID 存储在 Cookie 当中
  4. 客户端在后续的请求中会携带该 Cookie 值,服务器收到请求后会根据 Session ID 在 Redis 中取出用户信息,然后进行后续的业务操作

Cookie VS Session

Cookie Session
Cookie 存储在客户端 Session 存储在服务器端
Cookie 只能存储 ASCII 字符串 Session 可以存储任意类型的数据
Cookie 最大能够存储4KB Session 能够存储的最大容量一般没有限制
上一篇 下一篇

猜你喜欢

热点阅读