9.cookie、sessionStorage、LocalStorage 区别,项目中的使用,细问在公司里如何共享会话数据

书诚小驿2024/10/01前端面经JavaScript

一、cookie、sessionStorage、LocalStorage 区别,项目中的使用

localStorage、sessionStorage 和 cookie 是浏览器提供的用于在客户端存储数据的机制,主要用于保存用户信息或状态。 细问在公司里怎么共享 session

都保存在客户端。 有效期、大小、服务器端通信方面 cookie:可设置有效期,默认浏览器关闭失效。大小 4K。参与服务器端通信,携带在请 求头里。 localStorage:永久有效,除非手动删除。大小 5M。不 参与服务器端通信。 sessionStorage:当前会话期有效。大小 5M。不 参与服务器端通信。

  1. Cookie
  • 作用:用于在客户端和服务器之间传递少量数据,常用于保存用户的登录状态、用户偏好、跟踪用户行为等。
  • 存储大小:约 4KB(每个域名)。
  • 数据有效期:可以由开发者设置到期时间。如果不设置,默认是会话级别的,关闭浏览器后就会删除。
  • 作用域:可以通过 HTTP 请求发送到服务器,服务端可以读取和设置 Cookie。也可以在客户端(JavaScript)读取。
  • 安全性:Cookie 可以设置为 HttpOnly,这样 JavaScript 无法读取,增强安全性。
  1. localStorage
  • 作用:用于保存大量数据,并且数据在页面关闭或浏览器关闭后仍然存在,除非手动删除或用户清理浏览器数据。
  • 存储大小:通常约为 5MB(每个域名)。
  • 数据有效期:永久存储,除非用户手动清除数据或使用代码删除。
  • 作用域:同源限制,即同一个域名下的所有页面共享同一份 localStorage 数据。
  • 安全性:只能在客户端存储和读取,无法通过 HTTP 请求发送给服务器。
  1. sessionStorage
  • 作用:类似于 localStorage,但数据的生命周期仅限于会话。页面关闭后,数据就会消失,适合用于临时存储数据。
  • 存储大小:通常约为 5MB(每个域名)。
  • 数据有效期:仅在页面会话期间有效,页面关闭后数据丢失。
  • 作用域:每个标签页的 sessionStorage 是独立的,即使在同一个域名下,不同标签页之间的数据也是相互隔离的。
特性CookielocalStoragesessionStorage
数据存储有效期可自定义(默认会话级别)永久,除非手动清除页面会话结束时删除
存储空间约 4KB约 5MB约 5MB
数据与服务器的交互可通过 HTTP 请求传递仅客户端可访问仅客户端可访问
数据共享范围同一域名下的所有页面共享同一域名下的所有页面共享同一页面会话独立

二、使用场景

  1. Cookie:适用于需要与服务器交互的数据存储,例如登录信息、会话 ID 等。
  2. localStorage:适用于长期存储客户端数据,例如用户设置、主题选择等。
  3. sessionStorage:适用于临时存储数据,例如表单数据的临时保存、页面间的数据传递。

三、在公司里如何共享会话数据

  • 如果需要跨标签页共享会话数据,可以使用 Cookie 或 服务器端的 Session 管理。
  • 如果需要跨设备共享会话数据,可以使用 基于令牌的身份验证(JWT) 或 服务器端会话管理。
  • 如果需要实时同步会话数据,可以使用 WebSocket 或 API 同步机制。
  1. 使用 Cookie
  • 跨浏览器标签页共享:Cookie 是可以跨多个标签页共享的,特别是如果它们是同一域名下的应用。你可以在服务端设置一个带有会话 ID 的 Cookie,每次请求时,客户端都会自动将该 Cookie 发送给服务器,从而实现会话共享。
  • 跨设备共享:如果用户在不同设备上登录,服务器可以识别 Cookie 中的会话 ID,并恢复用户的状态。
  1. 实现步骤:
  • 用户登录时,服务器生成一个唯一的会话 ID,并将其存储在 Cookie 中。
  • 客户端在后续的 HTTP 请求中发送该 Cookie,服务器根据会话 ID 确认用户身份并恢复会话数据。

2、服务器的 Session 管理

  1. 基于服务器的 Session 管理
  • 中央会话存储:可以在服务器上使用一个会话管理系统(如 Redis、数据库),通过会话 ID 在服务器端保存所有会话数据。客户端只需要保存一个会话 ID(通常通过 Cookie 或 URL 参数),所有的会话数据都保存在服务器端。
  • 跨多个标签页或设备共享:只要会话 ID 保持一致,用户可以在多个标签页、多个浏览器或多个设备上共享同一个会话。
  1. 实现步骤:
  • 用户登录后,服务器生成一个唯一的会话 ID 并在服务器上存储与该会话 ID 相关的所有数据。
  • 会话 ID 通过 Cookie 或其他方式传递给客户端,并在后续请求时用于访问会话数据。
  • 当用户在不同的标签页或设备上登录时,服务器可以基于同一个会话 ID 恢复用户状态。

3、使用 WebSocket 或 API 同步会话数据

  1. 使用 WebSocket 或 API 同步会话数据
  • 实时同步会话数据:通过 WebSocket 或 REST API,可以在不同标签页或设备之间实时同步会话数据。
  • 使用场景:当你需要实时性较高的共享(例如,多个用户同时编辑同一个文档或页面时),WebSocket 是一个很好的选择。API 则适合定期同步或按需获取会话数据。
  1. 实现步骤:
  • 在客户端,使用 WebSocket 或定期通过 API 调用与服务器同步会话数据。
  • 服务器端维持会话数据,当一个客户端更新时,服务器可以广播给其他客户端。

4、Token-Based Authentication (基于令牌的身份验证)

  1. Token-Based Authentication (基于令牌的身份验证)
  • JWT(JSON Web Token):可以通过生成 JWT 来共享会话状态。JWT 是一种包含用户身份和会话数据的加密令牌,存储在客户端的 - localStorage 或 Cookie 中,并在每次请求时发送给服务器验证。 跨设备和标签页共享:JWT 是无状态的,服务器不需要存储会话数据,可以用于跨设备共享。
  1. 实现步骤:
  • 用户登录后,服务器生成一个 JWT,包含用户的身份信息和其他会话数据。
  • 客户端将 JWT 存储在 localStorage 或 Cookie 中,并在每次 HTTP 请求时发送给服务器验证。
  • 服务器在接收到 JWT 后,解析其中的信息,并根据需要恢复用户状态。
最后更新时间' 2025/1/3 14:16:58