简介:web开发Session知识
什么是Session
背景:HTTP协议作是无状态协议,⽆无状态指每次request请求之前是相互独⽴立的,当前请求
并不不会记录它的上⼀一次请求信息。
存在这样的问题,既然⽆无状态,那完成⼀一套完整的业务逻辑,需要发送多次请求,那么怎么
标识这些请求都是同个浏览器器操作呢?
cookie和session都是为了了弥补http协议的无状态特性,对server端来说无法知道两次http请
求是否来⾃自同一个⽤用户,利⽤用cookie和session就可以让server端知道多次http请求是否来⾃同⼀用户。
生成和使用流程(和Cookie知识点一样,两者互相配合)
- 览器器第⼀一次发送request请求到服务器器,服务器器除了了返回请求的response之外,还给请求分配⼀一个唯⼀一标识sessionId和response⼀一并返回给浏览器器
- 服务器器在本地创建⼀一个map结构,专⻔门以key-value存储这个sessionId和浏览器器的关系
- 当浏览器器的第⼀一次请求后已经分配⼀一个sessionId,当第⼆二次访问时会⾃自动带上这个标识sessionId
- 服务器器通过查找这个sessionId就知道⽤用户状态了了,并更更新sessionId的最后访问时间。
- 注意: Session是有时限性的:⽐比如如果30分钟内某个session都没有被更更新,服务器器就会删除这个它。
总结:
. Cookie 和 Session 的关系
-
Cookie 是存储在客户端(浏览器)中的小型文本文件,用于在客户端和服务器之间传递少量信息。Cookie 的典型用途是:
- 保存用户的登录状态。
- 跟踪用户的会话。
- 保存用户偏好设置。
-
Session 是由服务器维护的一种用户会话状态管理方式。Session 通过服务器端的
Map
(或其他数据结构)存储和管理用户会话数据,如登录信息、购物车内容等。
关键点:
-
Session 依赖于 Cookie:
- 在大多数情况下,
Session
的标识符(如JSESSIONID
)会通过 Cookie 发送到客户端。 - 每次客户端发送请求时,浏览器会自动将存储的 Cookie(包括
JSESSIONID
)发送回服务器,服务器根据这个JSESSIONID
找到对应的Session
。
- 在大多数情况下,
-
如果客户端禁用了 Cookie,则可以通过 URL 重写(将
JSESSIONID
附加到 URL 中)来传递Session
标识符。