LOGO OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 开发文档 其他文档  
 
网站管理员

【WEB开发】Cookie、Session、Local Storage 和 Session Storage 详解

admin
2025年4月8日 9:44 本文热度 222

一、基本概念与工作机制

  1. Cookie

    • 可设置过期时间(持久化)或会话级别(关闭浏览器失效)。
    • 支持安全属性(HttpOnlySecureSameSite)防范 XSS 和 CSRF 攻击。
    • 服务器通过响应头 Set-Cookie 设置客户端存储的键值对。
    • 客户端每次请求自动携带同源 Cookie,实现状态保持(如登录凭证)。
    • 定义

      由服务器生成并发送到客户端的小型文本数据(通常不超过4KB),用于跟踪用户状态。
    • 工作机制:

      服务器通过响应头 Set-Cookie 设置客户端存储的键值对。
      客户端每次请求自动携带同源 Cookie,实现状态保持(如登录凭证)。
    • 特性:

      可设置过期时间(持久化)或会话级别(关闭浏览器失效)。
      支持安全属性(HttpOnlySecureSameSite)防范 XSS 和 CSRF 攻击。
  2. Session

    • 数据存储在服务器内存或数据库中,安全性较高。
    • 默认会话级有效期,支持手动设置超时时间。
    • 首次请求时服务器创建 Session 并返回 Session ID,后续请求通过该 ID 关联数据。
    • 若客户端禁用 Cookie,需通过 URL 重写传递 Session ID。
    • 定义

      服务器端存储的用户会话数据,通过 Session ID(通常存于 Cookie)标识客户端身份。
    • 工作机制:

      首次请求时服务器创建 Session 并返回 Session ID,后续请求通过该 ID 关联数据。
      若客户端禁用 Cookie,需通过 URL 重写传递 Session ID。
    • 特性:

      数据存储在服务器内存或数据库中,安全性较高。
      默认会话级有效期,支持手动设置超时时间。
  3. Local Storage

    • 通过 localStorage.setItem(key, value) 存储字符串类型数据。
    • 同源窗口共享数据,容量约5MB。
    • 定义

      HTML5 提供的客户端持久化存储,数据永久保存(需手动删除)。
    • 工作机制:

      通过 localStorage.setItem(key, value) 存储字符串类型数据。
      同源窗口共享数据,容量约5MB。
    • 典型应用

      长期保存用户主题偏好、缓存静态资源。
  4. Session Storage

    • 与 Local Storage API 相同,但作用域限定为单个标签页。
    • 适用于临时数据存储(如表单草稿、多步骤流程状态)。
    • 定义

      会话级客户端存储,数据仅在当前标签页有效,关闭后自动清除。
    • 工作机制:

      与 Local Storage API 相同,但作用域限定为单个标签页。
      适用于临时数据存储(如表单草稿、多步骤流程状态)。

二、优缺点对比

特性CookieSessionLocal StorageSession Storage
存储位置
客户端
服务器端
客户端
客户端
生命周期
可自定义过期时间
会话或自定义超时
永久存储(手动删除)
会话级(标签页关闭清除)
容量限制
4KB/域名
无限制(受服务器内存限制)
约5MB
约5MB
安全性
较低(易受 XSS/CSRF 攻击)
较高(数据在服务端)
中(依赖同源策略)
中(同 Local Storage)
数据传输
每次请求自动携带
仅传递 Session ID
不参与 HTTP 请求
不参与 HTTP 请求



三、应用案例分析

  1. Cookie 应用:用户登录状态

    • 场景

      用户登录后,服务器返回包含身份令牌的 Cookie,后续请求自动携带实现免密验证。
    • 代码示例:
      javascript // 服务端设置 Cookie(Node.js) res.setHeader('Set-Cookie', 'token=abc123; HttpOnly; Max-Age=3600');

  2. Session 应用:购物车功能

    • 场景

      用户添加商品至购物车,服务器通过 Session 存储商品列表。
    • 代码示例:
      java // Java Servlet 中操作 Session HttpSession session = request.getSession(); session.setAttribute("cart", productList);

  3. Local Storage 应用:主题偏好持久化

    • 场景

      用户选择深色主题后,前端保存至 Local Storage,下次加载自动应用。
    • 代码示例:
      javascript // 保存主题 localStorage.setItem('theme', 'dark'); // 读取主题 const theme = localStorage.getItem('theme') || 'light'; document.body.className = theme;

  4. Session Storage 应用:表单草稿暂存

    • 场景

      用户填写多步骤表单时,实时保存草稿至 Session Storage,防止意外关闭丢失数据。
    • 代码示例:
      javascript // 监听输入并保存 form.addEventListener('input', () => { const data = JSON.stringify(formData); sessionStorage.setItem('draft', data); });


四、安全与最佳实践

  1. Cookie

    • 敏感数据(如 Token)应设置 HttpOnly 和 Secure 属性。
    • 使用 SameSite=Strict 防范 CSRF 攻击。
  2. Session

    • 避免存储过大对象,防止服务器内存压力。
    • 分布式系统中需使用集中式 Session 存储(如 Redis)。
  3. Web Storage

    • 避免存储敏感信息(如密码),需加密处理。
    • 监听 storage 事件实现跨标签页同步(仅 Local Storage)。

五、总结

  • Cookie

    适用于需与服务器交互的小型数据(如身份验证),但需注意安全性。
  • Session

    适合存储敏感或临时会话数据(如购物车),依赖服务器资源。
  • Local Storage

    长期存储非敏感数据(如用户偏好),容量大且易用。
  • Session Storage

    临时存储会话级数据(如表单草稿),标签页隔离更安全。

根据具体场景选择合适的存储方案,结合安全策略和性能要求,可显著提升用户体验和系统可靠性。


阅读原文:原文链接


该文章在 2025/4/8 15:02:06 编辑过
关键字查询
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2025 ClickSun All Rights Reserved