
资料内容:
2. Session 基础大揭秘
2.1 Session 是什么
在 Web 应用的领域中,Session 可以被看作是一种在服务器端存储用户相关信息的机制。由于 HTTP
协议是无状态的,即服务器无法识别连续的请求是否来自同一个用户,而 Session 的出现就是为了解
决这个问题,实现对用户状态的跟踪 。就好比你去一家会员制超市购物,刚进入超市时(首次访问网
站),工作人员会给你一张专属的购物卡(生成 Session ID),卡上记录着你的一些基本信息(用户
相关数据) 。当你在超市里挑选商品,从一个货架走到另一个货架(在网站的不同页面间跳转),每
次你拿着购物卡进行商品扫描(发送请求并携带 Session ID)时,超市系统就能知道是你在购物,从
而可以为你提供个性化服务,比如记录你挑选的商品(保存用户数据),方便你最后统一结账(在不
同请求间保持数据一致性)。
从技术角度来说,当用户首次访问 Web 应用时,服务器会为该用户创建一个唯一的 Session ID,并
将其发送给客户端,通常是通过 Cookie 或者 URL 重写的方式。在后续的请求中,客户端会将这个
Session ID 发送回服务器,服务器则根据这个 ID 来识别用户,并获取与之关联的 Session 数据。
例如在 Java Web 开发中,我们可以通过HttpServletRequest.getSession方法来获取当前用户的
Session 对象,进而对其中的数据进行读写操作。2.2 Session 工作原理深度剖析
2.2.1 基于 Cookie 的实现机制
在基于 Cookie 的 Session 实现中,当用户首次访问 Web 应用时,服务器会创建一个唯一的 Session 对
象,并生成一个对应的 Session ID,也就是常说的jsessionid。服务器通过Set - Cookie响应头将
这个jsessionid发送给客户端,客户端则将其存储在 Cookie 中 。举例来说,在一个电商网站中,用
户首次登录时,服务器生成了一个jsessionid为 “123456”,并通过Set - Cookie: JSESSIONID=
123456的方式发送给用户的浏览器,浏览器就会把这个JSESSIONID保存在 Cookie 里。
当客户端再次向服务器发送请求时,会在请求头中带上这个包含jsessionid的 Cookie。服务器接收
到请求后,从请求头的 Cookie 中提取出jsessionid,然后根据这个jsessionid在服务器端查找对应
的 Session 对象,从而获取用户的相关信息。这就好比你去商场的存包处存包,工作人员给你一个带
有编号的存包牌(jsessionid),当你再次去取包时,只要出示这个存包牌,工作人员就能根据编号
找到你存放的包裹(对应的 Session 数据) 。