Session 管理

211 阅读2分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第23天,点击查看活动详情

Session 原理

在计算机中 Session 称为 会话。是指一个终端用户与交互系统进行通信的时间间隔。在 Web 中,Session 的过程是:

当一个用户登录后服务器为其创建一个 session 并在响应用户请求时返回一个 全局唯一标识 sessionId ,浏览器会将其记录到 cookie 中。当用户再次请求或者请求其他的功能时,仅需携带 cookie ,服务端就可以拿到 sessionId 识别出用户,即可认证通过。

session 过期

那么 session 什么时候过期,怎么过期?一般涉及 session 过期有2种场景:

  • 关闭浏览器时 session 失效
  • session 到过期时间时自动过期

Cookie 是保存在客户端浏览器,Session 保存在服务器中。关闭浏览器时,session 失效这种情况,其实不是 session 失效,是 cookie 丢失。cookie 不包含到期日期,其声明周期由浏览器控制,cookie 会存在浏览器内,不写入磁盘。所以关闭浏览器时,Cookie 也跟着删除。这样就没有 sessionId ,服务端就找不到对应的Session,只能重新登录后重新分配。

自动过期,是因为 Cookie由到期日期,被存储在客户端的磁盘中,然后在指定的到期日期,Cookie将从磁盘中删除。

但是,有时候我们会给 session 设置一个过期时间,当到指定的过期时间时,session 将会被删除。这时,客户端再次请求时,在服务端无法找到对应的 session,那么会话就会过期结束。

session 管理

单体架构

单体架构,只有一台服务器,那么一般都会将session 保存到服务器的内存中,简单控制保持用户状态。

集群/分布式架构

架构的演变,使得如果只保存在服务器内,将导致其他服务器没有该session 就需要重新登录,这明显是个不合理的设计。

  • 一种方案是不同服务器之间打通一条互相复制的 session 的路线,或者相互同步的机制,但是明显会有延迟的情况,可能发生不一致的情况。
  • 另一种方案是通过存储媒介,比如 redis 。此方案的好处就是不与应用服务器耦合,可以部署到任何web应用服务器中。redis也是高性能的缓存服务器,且可持久化。