cookie+session和token

本文介绍了session和JWT两种会话管理机制,从Cookie的明文存储问题发展到session的安全性提升,再到JWT的出现以解决分布式存储时的鉴权问题,强调了JWT的加密和签名特性。

总结说在前面:

  • session:起源于服务端,保存在服务端(服务器或者数据库),通过cookie传递给用户,用户每一次发送HTTP请求的时候,通过验证cookie中的session-id来验证用户身份。
  • jwt(json web token):起源于服务端,保存在浏览器(cookie或者storage),和session一样,用户每一次发送HTTP请求的时候,携带token,通过算法来验证token的正确性。

一开始的cookie通过明文存储username和password,然后传递给服务器,但是这种方式可以将数据传递给服务器,也可以被黑客拦截。

所以session出现了,session-id是一段字符串,被保存在服务器和浏览器中,每一次通过比对和算法验证,来验证用户身份。然而,虽然不是明文传输了,但是session-id一样可以被黑客获得。当然,相对之前的cookie,安全性没事提高了一些的。

随着用户量增多,数据量也增大了。服务器存储不下,这么多的session-id了。一开始是想要使用分布式存储,也就是一台机器放不下的数据,我就多拿几台机器来存储。但是,如果我拿着一个session-id去请求一个没有存储我这个session-id的服务器的话,就会”鉴权“失败。

因此,jwt(json web token)出现了,jwt有三部分组成:【加密算法.携带数据.签名】,这些数据被base64编码之后进行发送。(注意:base64编码可以被双向加解密,所以相当于明文发送)这些数据会被保存在浏览器中,每一次发送给服务器的时候,只需要验证签名是否相同即可。

### CookieSession Token 的使用场景及优缺点比较 #### 1. **Cookie 的优缺点** - **优点**: - 简单易用,浏览器会自动处理 Cookie 的发送接收[^2]。 - 适用于简单的身份验证少量数据存储[^4]。 - **缺点**: - 安全性较低,容易受到 XSS(跨站脚本攻击) CSRF(跨站请求伪造)的威胁[^3]。 - 数据大小受限(通常为 4KB),不适合存储大量数据[^4]。 - 每次 HTTP 请求都会携带 Cookie 数据,增加了网络流量负担[^1]。 #### 2. **Session 的优缺点** - **优点**: - 数据存储在服务器端,安全性较高,避免了客户端篡改的风险。 - 支持复杂的数据结构,适合存储用户会话中的大量信息[^3]。 - **缺点**: - 需要依赖 Cookie 来传递 Session ID,仍然可能受到 CSRF 攻击。 - 服务器需要维护会话状态,可能会导致内存占用过高,尤其是在高并发场景下。 - 不适合无状态的分布式系统,因为 Session 数据难以在多个服务器之间共享。 #### 3. **Token 的优缺点** - **优点**: - 基于无状态设计,适合分布式系统微服务架构。 - 可以通过加密技术确保数据的安全性完整性。 - 不需要依赖 Cookie,可以避免 CSRF 攻击[^1]。 - 移动端支持友好,适合现代应用开发[^1]。 - **缺点**: - 如果 Token 存储在本地存储中,可能会受到 XSS 攻击[^3]。 - Token 的有效期管理较为复杂,可能需要额外的刷新机制。 - 如果使用数据库存储 Token,可能会增加查询时间;但如果选择 Redis 等内存数据库,则可以缓解这一问题[^1]。 #### 4. **使用场景比较** - **Cookie Session**:适合传统的 Web 应用程序,尤其是需要频繁交互的场景。例如,电商网站的购物车功能[^4]。 - **Token**:适合现代的单页应用(SPA)、移动端应用以及分布式系统。例如,基于 RESTful API 的应用程序[^1]。 ```python # 示例:生成 JWT Token import jwt import datetime def generate_token(user_id): payload = { 'user_id': user_id, 'exp': datetime.datetime.utcnow() + datetime.timedelta(hours=1) # 设置过期时间为1小时 } token = jwt.encode(payload, 'secret_key', algorithm='HS256') return token ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hyzhang_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值