HTTP Cookie Session
HTTP一、核心前提HTTP 无状态HTTP 协议本身不记住用户状态每次请求都是独立的。比如你登录淘宝刷新页面网站就不认识你了于是诞生了 Cookie、Session 用来保存登录 / 身份信息。http是无状态的即你打开一个网页关闭之后下次再重新登陆网页是不记录任何信息比如你登陆B站第一次登陆用户名和密码下次再次访问这个网页时就不需要再次输入用户名和密码了这是得益于cookie的功劳。cookiecookie:存在浏览器本地的小型文本文件由服务器下发浏览器自动携带发给服务端存储位置客户端浏览器大小限制单个 Cookie 最多 4KB一个域名最多 50 个生命周期会话 Cookie关闭浏览器自动删除持久 Cookie设置 expires/max-age存在硬盘过期才删工作流程1.浏览器第一次访问服务器服务器返回响应头 Set-Cookie: userid10012.浏览器保存这条 Cookie之后每次访问同域名请求头自动带上 Cookie: userid10013.服务器读取 Cookie 识别用户优点存储在客户端不占用服务器内存简单、原生支持所有浏览器缺点不安全存在本地可被篡改、窃取XSS 偷 Cookie容量小每次请求都会携带增加带宽用户可以手动禁用 CookieSessionsession: 存在服务端的用户数据存储空间依赖 Cookie 实现。核心逻辑服务器只给浏览器发一个唯一标识 SessionID真实用户信息账号、权限存在服务器内存 / Redis。工作流程1.用户第一次登录服务端创建 Session生成唯一 SessionID2.通过 Set-Cookie 把 SessionID 发给浏览器保存3.后续请求浏览器自动带上 Cookie 里的 SessionID4.服务器拿到 ID去服务端查找对应的用户数据识别登录状态5.用户退出登录服务器销毁对应 Session.优点安全用户敏感数据存在服务端前端只能拿到一串 ID存储量大不受 4KB 限制缺点占用服务器内存用户量大时压力高多服务器集群时需要共享 Session存入 Redis依赖 Cookie浏览器禁用 Cookie 后 Session 会失效可 URL 传 ID 补救