当前位置: 首页 > news >正文

Web存储技术详解:sessionStorage、localStorage与Cookie

一、核心特性对比

特性CookielocalStoragesessionStorage
存储大小4KB左右5-10MB5-10MB
生命周期可设置过期时间永久存储(除非手动清除)会话期间有效(标签页关闭即清除)
作用域同源的所有窗口同源的所有窗口仅当前标签页
自动发送每次HTTP请求自动发送不自动发送不自动发送
存储位置浏览器和服务器仅浏览器仅浏览器
API易用性需手动解析简单键值对API简单键值对API
安全性较低(易受XSS攻击)较高较高

二、API使用示例

1. Cookie操作

// 设置Cookie
document.cookie = "username=John; expires=Fri, 31 Dec 2025 23:59:59 GMT; path=/";// 读取Cookie
function getCookie(name) {const value = `; ${document.cookie}`;const parts = value.split(`; ${name}=`);if (parts.length === 2) return parts.pop().split(';').shift();
}// 删除Cookie
document.cookie = "username=; expires=Thu, 01 Jan 1970 00:00:00 GMT";

2. localStorage操作

// 存储数据
localStorage.setItem('theme', 'dark');// 读取数据
const theme = localStorage.getItem('theme');// 删除数据
localStorage.removeItem('theme');// 清空所有
localStorage.clear();

3. sessionStorage操作

// 存储数据
sessionStorage.setItem('sessionId', 'abc123');// 读取数据
const sessionId = sessionStorage.getItem('sessionId');// 删除数据
sessionStorage.removeItem('sessionId');// 清空当前会话存储
sessionStorage.clear();

三、使用场景推荐

1. Cookie适用场景

  • 用户身份认证:存储Session ID

  • 跟踪用户行为:分析用户访问路径

  • 个性化设置:保存语言、地区偏好(需要服务器访问时)

2. localStorage适用场景

  • 长期用户设置:主题、字体大小等偏好

  • 离线应用数据:缓存应用数据供离线使用

  • 不敏感数据存储:如阅读进度、应用状态

3. sessionStorage适用场景

  • 表单数据暂存:防止页面意外关闭丢失数据

  • 单页应用状态:存储当前会话的临时状态

  • 敏感数据临时存储:如支付流程中的临时令牌

四、安全最佳实践

  1. Cookie安全

    • 始终使用Secure标志(仅HTTPS)

    • 敏感Cookie设置HttpOnly(防XSS)

    • 设置SameSite=StrictLax(防CSRF)

    • 限制Cookie作用域(Domain和Path)

  2. Web存储安全

    • 避免存储敏感信息(令牌、密码等)

    • 对存储的数据进行加密

    • 实施内容安全策略(CSP)

    • 定期清理不再需要的数据

  3. 通用原则

    • 最小化存储数据量

    • 设置合理的过期时间

    • 提供用户控制选项(清除数据)

    • 使用子资源完整性(SRI)防止恶意脚本

http://www.lryc.cn/news/611068.html

相关文章:

  • 每日五个pyecharts可视化图表-bars(4)
  • 手绘风格制图新选择:如何用Excalidraw+cpolar构建你的视觉化工作流?
  • 一次完整的 Docker 启动失败排错之旅:从 `start-limit` 到 `network not found
  • Docker Desktop
  • 利用DeepSeek编写带缓冲输出的V语言程序
  • P1103《书本整理》精讲
  • PowerBI VS QuickBI 实现图表的动态配色
  • linux-系统日志查看指令systemctl
  • 37.【.NET8 实战--孢子记账--从单体到微服务--转向微服务】--扩展功能--增加Github Action
  • STM32U575低功耗调试
  • Rust进阶-part3-生命周期
  • DAY 36 复习日
  • C++进阶—特殊类设计
  • 国产三防平板电脑是什么?三防平板推荐
  • Prometheus 监控平台部署 (云原生环境)
  • C语言基础_补充知识、数据类型转换、选择结构
  • OpenLayers学习(一)-基础
  • bcryptprimitives.dll是什么文件
  • 机器学习 集成学习之随机森林
  • 真正的多模态上下文学习需要关注视觉上下文
  • ASP3605I同步降压调节器的高频化设计与多相扩展技术优化方案
  • 利用链上数据进行数字资产量化因子发现
  • 关于怎么知道linux(ubuntu)系统交叉编译器的命令的方法:
  • 算法训练之哈希表
  • 【自动化运维神器Ansible】playbook核心组件之templates深度解析
  • 如何在虚拟机(Linux)安装Qt5.15.2
  • lvm逻辑卷管理
  • docker-compose常用的网络模式有哪些?
  • Linux DNS缓存与Nginx DNS缓存运维文档
  • RK3568 Linux驱动学习——字符设备驱动开发