当前位置: 首页 > 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.dtcms.com/a/316613.html

相关文章:

  • MySQL 深分页优化方案
  • Matplotlib(六)- 坐标轴定制
  • 【motion】HumanML3D 的安装1:环境搭建
  • 制造业ERP系统架构设计方案(基于C#生态)
  • [激光原理与应用-151]:光学器件 - 光学平晶:高精度平面度检测的核心工具
  • 用phpstudy安装php8.2后报错:意思是找不到php_redis.dll拓展时
  • 如何对云环境或者超融合系统进行性能测试?
  • Pandas 入门:数据分析的得力工具
  • PowerBI VS QuickBI 实现图表的动态配色
  • Vue 2 渲染链路剖析
  • Linux逻辑卷管理操作指南
  • Arxiv-Daily
  • AUTOSAR进阶图解==>AUTOSAR_RS_ECUResourceTemplate
  • 【前端】使用jQuery播放图片,类似播放幻灯片一样
  • Redis面试精讲 Day 11:Redis主从复制原理与实践
  • RAG向量检索增强生成
  • MediaPipe框架解析(五):c++ face_mesh解析
  • TDengine 中 TDgpt 的模型评估工具
  • 基于WOA鲸鱼优化的VMD-GRU时间序列预测算法matlab仿真
  • 代码随想录day57图论7
  • (ZipList入门笔记一)ZipList的节点介绍
  • 【RH124 问答题】第 6 章 管理本地用户和组
  • ⭐CVPR2025 MatAnyone:稳定且精细的视频抠图新框架
  • LLM开发——语言模型会根据你的提问方式来改变答案
  • Android与Flutter混合开发:页面跳转与通信完整指南
  • 深入剖析 RAG 检索系统中的召回方式:BM25、向量召回、混合策略全解析
  • Go语言 string
  • stm32项目(21)——基于STM32和MPU6050的体感机械臂开发
  • 跨尺度目标漏检率↓82.4%!陌讯多尺度融合算法在占道经营识别的实战优化
  • 结构化开发方法详解:软件工程的奠基性范式