javascript如何存储数据在客户端【教程】
技术百科
紅蓮之龍
发布时间:2026-01-25
浏览: 次 JavaScript客户端存储有三类:localStorage(持久化字符串存储,需JSON序列化/解析,容量5–10MB)、sessionStorage(标签页级临时存储,关闭即清空)、Cookie(需设expires/max-age才持久,4KB/个,受path/domain限制);均不安全,敏感数据禁用。
JavaScript 在客户端存储数据,核心就三条路:localStorage、sessionStorage 和 cookies,选错会导致数据意外丢失、跨域失效或被服务端反复传输。
localStorage 存的是字符串,非对象
localStorage 只接受字符串作为值,直接存对象会变成 [object Object],取出来无法还原。
- 存之前必须用
JSON.stringify()序列化 - 取出来后必须用
JSON.parse()解析,且要加try/catch防止损坏的 JSON 导致脚本中断 - 超过 5–10MB(依浏览器而异)会抛出
QuotaExceededError,不是所有浏览器都提示清楚
localStorage.setItem('user', JSON.stringify({id: 123, name: 'Alice'}));
const user = JSON.parse(localStorage.getItem('user') || '{}');
sessionStorage 的生命周期只绑定当前 tab
sessionStorage 不是“用户会话”,而是“页面会话”——关闭 tab 就清空,新开 tab 或 iframe 完全隔离,哪怕 URL 一模一样也不共享。
- 适合临时表单草稿、向导步骤状态,但别指望它在多个窗口间同步
- 和
localStorageAPI 完全一致,只是作用域不同 - 刷新页面保留,但
location.reload(true)强制重载也不会清空它
Cookie 要手动设 expires 或 max-age 才持久
不设过期时间的 cookie 是 session cookie,关浏览器就丢;想持久必须显式声明有效期,且注意路径(path)和域名(domain)限制。
- 写 cookie 用
document.cookie = 'key=value; expires=...; path=/; secure; SameSite=Lax' -
secure表示仅 HTTPS 传输,SameSite影响跨站请求携带行为 - 每个 cookie 最大 4KB,总数量也有限制(通常 100–200 个),超了老的会被静默丢弃
敏感数据别放客户端存储里
无论 localStorage、sessionStorage 还是 cookie,只要在浏览器里,就可能被 XSS 脚本读取。token、密码、身份证号这类东西,绝不该明文存在其中。
- JWT 如果必须存,至少用
httpOnly+securecookie(但 JS
就读不到,得靠服务端验证)
- 前端能存的最多是脱敏 ID、主题偏好、语言设置这类无害信息
- localStorage 没有同源策略外的隔离机制,同一域名下所有脚本都能读写
真正难的不是怎么存,是怎么判断该不该存、存多久、谁有权读——这些决定比代码多敲两行重要得多。
# ai
# 敏感数据
# 浏览器
# js
# json
# javascript
# java
# 前端
# 作用域
# session
# Object
# xss
# cookie
# 跨域
相关栏目:
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
AI推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
SEO优化<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
技术百科<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
谷歌推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
百度推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
网络营销<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
案例网站<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
精选文章<?muma echo $count; ?>
】
相关推荐
- Win10怎样卸载DockerDesktop_Wi
- Win11怎样安装网易云音乐_Win11安装网易云
- Win11声音太小怎么办_Windows 11开启
- Windows笔记本无法进入睡眠模式怎么办?(电源
- mac怎么查看wifi密码_MAC查看已连接WiF
- Win11怎么设置屏保_Windows 11屏幕保
- 如何解决Windows时间不准的问题?(自动同步设
- php本地部署后数据库连接报错_1045acces
- 如何关闭Win10自动更新更新_Win10系统自动
- PythonPandas数据分析教程_数据清洗与处
- Win10如何更改开机密码_Windows10登录
- mac怎么分屏_MAC双屏显示与分屏操作技巧【指南
- Mac电脑进水了怎么办_MacBook进水后紧急处
- Python装饰器复用技巧_通用能力解析【教程】
- Win11怎么关闭VBS安全性_Windows11
- 如何更改Windows资源管理器的默认启动位置?(
- Win11输入法切换快捷键怎么改_Windows
- Windows如何使用注册表查找和删除项?(reg
- C++友元类使用场景_C++类间协作设计方式讲解
- Windows10电脑怎么设置文件权限_Win10
- Windows10任务栏图标变成白色文件_Win1
- php怎么下载安装后无法解析php文件_服务器配置
- 如何使用Golang搭建本地API测试环境_快速验
- Win10电脑C盘红了怎么清理_Windows10
- 如何在Golang中使用log包输出不同级别日志_
- Win11怎么关闭右下角弹窗_Win11拦截系统通
- 如何用正则表达式精确匹配“start”到“end”
- 如何在Golang中优化文件读写性能_使用缓冲和并
- Linux如何安装Tomcat应用服务器_Linu
- 静态属性修改会影响所有实例吗_php作用域操作符下
- php嵌入式日志记录怎么实现_php将硬件数据写入
- mac本地php环境如何开启curl_curl扩展
- c++中explicit(bool)的用法 c++
- Python实现图数据库操作_Neo4j核心CRU
- Win11怎么设置默认浏览器Chrome_Wind
- VSC怎样用终端运行PHP_命令行执行脚本的步骤【
- 如何减少Golang内存碎片化_Golang内存分
- 电脑无法识别U盘怎么办 Windows磁盘管理与驱
- PHP怎么接收URL中的锚点参数_获取#后面参数值
- Win10怎样安装PPT模板_Win10安装PPT
- Win11怎么更改鼠标指针方案_Windows11
- PythonDocker高级项目部署教程_多容器管
- Win11怎么查看硬盘型号_Windows 11检
- PowerShell怎么创建复杂的XML结构
- Win10怎样设置多显示器_Win10多显示器扩展
- Win11怎么关闭任务栏小图标_Windows11
- c++获取当前时间戳_c++ time函数使用详解
- Win11怎样安装搜狗输入法_Win11安装搜狗输
- Win11怎么设置任务栏对齐方式_Windows1
- Win11怎么关闭系统透明度_Windows11个


QQ客服