Session的工作原理、Session与Token的区别

Session 是一种在无状态的 HTTP 协议中用来实现用户状态管理的机制。它通过在服务器端保存用户的状态信息,并通过客户端在每次请求时传递一个唯一的标识符(通常称为 Session ID),实现了在多个请求之间维持用户的会话状态。

一、Session 的工作原理:

  1. 客户端发送请求:用户首次访问网站时,客户端(例如浏览器)向服务器发送一个 HTTP 请求。

  2. 服务器创建 Session

    • 服务器在接收到请求后,会为这个用户创建一个 Session 对象,用来保存用户的会话信息(例如用户身份、购物车内容、浏览历史等)。
    • 服务器生成一个唯一的 Session ID,通常是一个随机的字符串,用来标识这个 Session
  3. 服务器返回 Session ID

    • 服务器将生成的 Session ID 通过 HTTP 响应传回给客户端,通常是以 Cookie 的形式存储在客户端的浏览器中。这个 Cookie 通常名为 JSESSIONID 或其他类似名称。
  4. 客户端携带 Session ID 发送后续请求

    • 当客户端发送后续的 HTTP 请求时,浏览器会自动在请求头中附带上 Session ID,以便服务器识别出是同一个用户的请求。
    • 服务器通过 Session ID 找到对应的 Session,从而获取并更新用户的会话信息。
  5. 服务器处理请求

    • 服务器根据找到的 Session 中存储的信息来处理用户的请求。例如,如果用户已登录,服务器可以从 Session 中获取用户的登录状态,而无需每次都重新认证用户身份。
  6. Session 过期与销毁

    • Session 具有过期时间,如果在设定的时间内客户端没有再次访问服务器,这个 Session 会自动失效,服务器将会销毁这个 Session
    • 用户主动登出时,服务器也会销毁对应的 Session,以确保安全性。

二、Session与Token的区别

1、存储位置的不同

  • Session存储在服务端,服务端会维护一个"Session"数据库,用户的会话信息将存储在服务器上面(如登录状态、权限等)。客户端只存储“Session ID”,通常用cookie保存
  • Token,通常使用JWT实现,包含用户身份等。“Token由服务器生成并返回给客户端,客户端负责存储(LocalStorage、SessionStorage、或cooki),每次请求时附带发给服务端

2. 安全性

  • Session

    • 因为 Session 信息存储在服务器端,客户端只持有一个 Session ID,安全性较高。如果 Session ID 被窃取,攻击者可以冒充用户发起请求,但无法直接读取用户的会话信息。
    • 服务器需要额外的资源来维护和保护 Session 数据,尤其在高并发环境下,可能导致扩展性问题。
  • Token

    • Token 是自包含的,所有的身份信息都在 Token 中,如果 Token 被窃取,攻击者可以完全冒充用户。
    • Token 通常使用加密和签名技术来防止篡改和伪造,可以通过设置过期时间和刷新机制来提高安全性。
       

3、扩展性

  • Session

    • 由于 Session 存储在服务器端,随着用户数量增加,服务器需要更多的内存和存储来维护会话状态。这在分布式系统中可能会导致复杂性,因为需要在多个服务器之间共享或同步 Session 数据。
  • Token

    • Token 是无状态的,不依赖于服务器存储。服务器不需要存储每个用户的会话信息,因此更容易扩展,尤其适合微服务架构或跨域请求。
    • 服务器只需要验证 Token 的签名和有效性,不需要与其他服务器同步状态信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值