cookie
-
http 无状态,每次请求都要带 cookie,以帮助识别身份
-
服务端也可以向客户端 set-cookie,cookie 大小限制 4kb
-
默认有跨域限制:不跨域共享、传递 cookie
现在浏览器开始禁用第三方 cookie
-
和跨域限制不同。这里是:禁止网页引入第三方 js 设置 cookie
-
打击第三方广告,保护个人隐私
-
新增属性 SameSite: Strict / Lax / None; 值可自己选择
cookie 和 session
-
cookie 用于登录验证,存储用户标识(如:userID)
-
session 在服务端,存储用户详情信息,和 cookie 信息一一对应
-
cookie + session 是常见登录验证解决方案
token vs cookie
-
cookie 是 http 规范,而 token 是自定义传递
-
cookie 会默认被浏览器存储,而 token 需自己存储
-
token 默认没有跨域限制
JWT(JSON Web Token)
-
前端发起登录,后端验证成功之后,返回一个加密的 token
-
前端自行存储这个 token(其中包含了用户信息,只是加密
-
以后访问服务端接口,都带着这个 token,作为用户信息
session 和 JWT 哪个更好
session 优点
-
原理简单,易于学习
-
用户信息存储在服务端,可快速封建某个用户
sesson 缺点
-
占用服务端内存,硬件成本高
-
多进程,多服务器时,不好同步 ———— 需使用第三方缓存,如:redis
-
默认有跨域限制
JWT 优点
-
不占用服务端内存
-
多进程、多服务器不受影响
-
没有跨域限制
JWT 缺点
-
用户信息存储在客户端,无法快速封禁某用户
-
万一服务端秘钥被泄漏,则用户信息全部丢失
-
token 体积一般大于 cookie,会增加请求的数据量