会话跟踪技术

session

Session(会话) 是指在一段时间内,服务器和用户之间的互动过程。
服务器用来存储用户信息的一个小“容器,Session 用于在用户与网站交互时存储和保持一些特定的数据,比如登录状态、购物车内容等。由于 HTTP 协议本身是无状态的(也就是说,每次请求是独立的,不记得之前的请求),Session 就是用来保持这种“状态”的。


工作原理

  1. 用户发起请求:
    当你第一次访问网站时,服务器为你创建一个 Session。此时,服务器会为你生成一个 Session ID,这就像是一个标识符,类似于你在餐厅吃饭时的号码牌。这个 Session ID 是唯一的,它用来标识你的“会话”状态。

  2. Session ID 存储:
    生成的 Session ID 会以一种安全的方式存储在你的浏览器中,通常是通过 cookie 来存储。如果浏览器支持 cookie,服务器会把 Session ID 放入一个 cookie 中,浏览器会在之后的每次请求中自动携带这个 cookie。

  3. 后续请求识别用户:
    之后,你每次向服务器发送请求时,浏览器都会自动把这个 Session ID 随请求一起发送给服务器。服务器收到请求后,通过这个 Session ID 查找并加载相应的 Session 数据,从而知道当前请求是哪个用户发出的,并且可以根据 Session 中存储的信息处理请求。

  4. 服务器存储数据:
    Session 数据是存储在服务器上的,通常是存在内存或者数据库中。每个 Session 都是独立的,数据会随着 Session 的存在而变化,比如用户登录后,服务器会在 Session 中存储用户的身份信息,直到用户退出或 Session 过期。

  5. Session 结束:
    当用户退出登录、关闭浏览器或者 Session 过期时,服务器会销毁这个 Session,释放存储在服务器上的数据。同时,浏览器也会删除对应的 Session ID 的 cookie。这样,用户的会话就结束了。


Session 的生命周期

  • 过期: 当用户在一段时间内没有任何活动,服务器会设定一个超时时间(比如 30 分钟),超过这个时间后,Session 会自动过期,数据会被清除。
  • 手动销毁: 用户退出登录或者通过代码手动销毁 Session(例如调用 session.invalidate()),Session 就会被销毁,相关数据也会被清空。

  • Cookie: 存储在用户浏览器端的数据,用于存储一些小的、无敏感信息(如 Session ID)。Cookie 可以有一定的过期时间,用户可以主动删除它。
  • Session: 存储在服务器端的数据,通常是与 Cookie 中的 Session ID 配合使用来实现用户状态的保持。

区别

  • 存储位置不同: Cookie 存储在客户端(浏览器),Session 存储在服务器端。
  • 安全性: Session 存储在服务器端,因此比 Cookie 更安全。因为 Session ID 可以在网络传输过程中被窃取,所以要配合加密或其他安全机制来防止会话劫持。
  • 大小限制: Cookie 存储的数据有大小限制(通常为 4 KB),而 Session 存储的数据大小由服务器配置决定,通常没有大小限制。

小型的数据文件,通常由网站存储在用户的浏览器中,用来记录用户的信息,以便在后续访问时能够记住一些设置或状态。通俗来说,Cookie 就是网站记住你的一些信息,帮助你更方便地使用它。
2


工作原理

  • 当你访问一个网站时,网站可以将 Cookie 存储在你浏览器(客户端)的本地。
  • 在你下一次访问这个网站时,浏览器会自动发送这个 Cookie 到服务器,服务器可以读取 Cookie 中保存的数据,并基于这些数据做出响应。

常见用途

用户身份验证:例如,登录状态会保存在 Cookie 中,你在浏览网站时不需要每次都输入用户名和密码。
个性化设置:网站可以记录你的偏好设置,比如语言选择、主题色等,方便下次访问时自动加载你喜欢的设置。
跟踪分析:一些网站会使用 Cookie 跟踪用户的浏览行为,收集数据以改进用户体验或进行广告投放。

组成

名字:每个 Cookie 有一个名字,用来标识它。
值:每个 Cookie 有一个值,存储的是实际的数据。
过期时间:Cookie 可以设置过期时间,超过这个时间后,浏览器会自动删除这个 Cookie。如果没有设置过期时间,它就是一个会话 Cookie,当浏览器关闭时就会被删除。
路径和域:Cookie 会限制在哪些页面或域名下可以访问,比如只能在同一个域名下的网页访问该 Cookie。
安全属性:如果设置了 Secure,这个 Cookie 只能通过 HTTPS 协议传输,增加安全性。

  • 创建 Cookie:网站服务器在响应头中设置 Cookie
  • 读取 Cookie:当浏览器访问该网站时,它会自动在请求头中发送 Cookie 数据
Set-Cookie: user=JohnDoe; expires=Wed, 21 Oct 2025 07:28:00 GMT; path=/;
Cookie: user=JohnDoe;

生命周期

会话 Cookie:没有设置过期时间,浏览器关闭时删除。
持久性 Cookie:设置了过期时间,会在指定的时间后过期并被删除。

LocalStorage:数据存储在浏览器中,不会随浏览器关闭而清除,可以存储大量数据(5MB 以上),且没有过期时间。
SessionStorage:数据在浏览器会话中有效,浏览器关闭后数据就会被删除,只能存储较小的数据(通常为 5MB 以下)。
Cookie:数据量较小(一般为 4KB),可以设置过期时间,适合用于存储一些会话信息。