cookie_and_session
标准 Session 工作流程
- 客户端首次请求 (Client’s First Request)
- 用户通过浏览器第一次访问服务器。
服务器端操作 (Server-Side Actions)
- 创建 Session ID: 服务器为该用户生成一个全局唯一且难以预测的字符串,这就是
Session ID。 - 创建 Session 存储: 服务器在自己的存储(内存、Redis、文件系统、数据库等)中开辟一块空间,创建一个与该
Session ID关联的“档案”。这个档案目前是空的,等待存放用户数据。 - 创建 Cookie: 服务器创建一个新的 Cookie。这个 Cookie 最关键的内容就是
name=SESSION_ID(或者jsessionid等,名字可自定义)和value=<刚刚生成的那个唯一的Session ID>。 - 发送响应: 服务器将这个带有
Session ID的 Cookie 放入 HTTP 响应的Set-Cookie头部,然后将响应发送回客户端。
- 创建 Session ID: 服务器为该用户生成一个全局唯一且难以预测的字符串,这就是
客户端存储 (Client-Side Storage)
- 浏览器收到服务器的响应后,解析
Set-Cookie头部,并将这个包含Session ID的 Cookie 存储在本地。
- 浏览器收到服务器的响应后,解析
客户端后续请求 (Client’s Subsequent Requests)
- 当用户在该网站上进行任何后续操作(点击链接、提交表单等)时,浏览器会自动地、在每一个发往该网站的 HTTP 请求的
Cookie头部,都附上之前存储的那个含有Session ID的 Cookie。
- 当用户在该网站上进行任何后续操作(点击链接、提交表单等)时,浏览器会自动地、在每一个发往该网站的 HTTP 请求的
服务器端验证与使用 (Server-Side Verification & Usage)
- 服务器接收到新的请求。
- 解析 Cookie: 服务器从请求的
Cookie头部中提取出Session ID的值。 - 查找档案: 服务器拿着这个
Session ID,去自己的存储中查找对应的“档案”。
.a. 如果找到: 说明用户是“老朋友”,服务器就可以读取或修改这份档案里的数据(比如检查登录状态、更新购物车),然后处理业务逻辑。
.b. 如果没找到: (可能因为 Session 过期被清理,或者客户端发送了一个伪造的/无效的 ID),服务器会认为这是一个无效的会话,通常会强制用户重新登录,或者为他创建一个全新的 Session(回到第2步)。
你的理解完全到位,没有任何偏差。这就是现代 Web 应用中最基础、最核心的状态管理机制。掌握了这个流程,你就理解了绝大多数网站“登录”功能的底层原理。
cookie_and_session

