cookie
存储在客户端,大小有限制,只能保存字符串,有效期可以设置长写
服务端回复set-cookie后,浏览器会设置cookie,可以设置是否能被脚本访问到
session
存储在服务端,基于cookie,用cookie中的sessionId标识,
Token
可以避免cookie重放攻击
对比
方式 | 特点 | 优点 | 缺点 |
---|---|---|---|
cookie | 1.存储在客户端。2.请求自动携带 cookie。3.存储大小 4KB。 | 1.兼容性好,因为是比较老的技术。 2.很容易实现,因为 cookie 会自动携带和存储。 |
1.需要单独解决跨域携带问题,比如多台服务器如何共享 cookie。 2.会遭受 CSRF 攻击。 3.存储在客户端,不够安全。 |
session | 1.存储在服务端。2.存储大小无限制。 | 1.查询速度快,因为是个会话,相当于是在内存中操作。 2.结合 cookie 后很容易实现鉴权。 3.安全,因为存储在服务端。 |
1.耗费服务器资源,因为每个客户端都会创建 session。 2.占据存储空间,session 相当于存储了一个完整的用户信息。 |
token | 1.体积很小。2.自由操作存储在哪里。 | 1.安全,因为 token 一般只有用户 id,就算被截取了也没什么用。 2.无需消耗服务器内存资源,它相当于只存了用户 id,session 相当于存储了用户的所有信息。 3.跨域处理较为方便,比如多台服务器之间可以共用一个 token。 4、可以防止跨域请求伪造攻击 |
1.查询速度慢,因为 token 只存了用户 id,每次需要去查询数据库。 |
SSO(单点登录)
JWT(JSON Web Token)
json格式的,使用.分割不同的部分,可以在url上传递
构成
头部、载荷、签名
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkYXRhIjpbeyJ1cmwiOiJodHRwczovL3Rvb2x0dC5jb20ifV0sImlhdCI6MTY0NjExMDgwNSwiZXhwIjoyNTU2MTE1MTk5LCJhdWQiOiIiLCJpc3MiOiJ0b29sdHQuY29tIiwic3ViIjoiIn0.NhUwqiPfYey9pKHSfrG-ptqEOamIQFK3-K7IrTeBFYU
base64URl解码后
{
"alg": "HS256",
"typ": "JWT"
}
{
"data": [
{
"url": "https://tooltt.com"
}
],
"iat": 1646110805,
"exp": 2556115199,
"aud": "",
"iss": "tooltt.com",
"sub": ""
}
可以使用加密算法,对头部 + 载荷进行加密,
登录流程
JWS(JSON Web Signature)
对载荷内容进行签名,防止被篡改
JWE(JSON Web Encrption)
对内容加密后的载荷