1. 区别

它们都是应对 http 无状态,为了保存用户状态信息而引入的

检查角度不同

  • cookie 是通过检查客户身上的“通行证”来确定客户身份
  • session 是通过检查服务器上的“客户明细表”来确认客户身份,

session 相当于程序在服务器上建立的一份客户档案,客户来访的时候只需要查询客户档案表

存储位置与安全性不同

  • session 存储在服务器端;
  • cookie 存储在用户浏览器,容易被恶意查看

因此,session 存储的信息更安全

数据复杂性不同

  • cookie 只能存 ASCII 字符串
  • session 可以存储任意类型数据

大访问量区别

  • cookie 最大长度 4kb,很多浏览器都限制一个站点最多保存20个 cookie,就是为了不在传输cookie的过程中耗费太多网络资源
  • session 没有限制,session 会在一定时间内保存在服务器上,访问量大时,会占用内存,影响性能

2. 应用场景

cookie 和 session 都是一种会话跟踪技术,其中,session 技术实现依赖于 cookie,因为 session 需要传递一个用户 sessionID 给用户,下次用户访问时,会将 sessionID 回传给服务器,这两个阶段都需要通过 cookie 来传递 ID

同时除了通过 cookie 实现 session 也可以通过另外两种技术实现 session :

  • URL 重写
  • 隐藏表单域

cookie 可以应用于:

  • 会话状态管理(用户登录状态、购物车信息等)
  • 个性化设置(用户自定义设置主题等)
  • 浏览器行为跟踪(记录用户使用偏好等)

对于 session 来说这些都是可以做到的

但考虑的安全和服务器性能,一般来把用户的登录账户个人信息存储在 session,保存到服务器;而用户自定义主题等安全性不是很高的则存储在 cookie