javascript cookie如何操作_怎样安全地存储用户状态【教程】
发布时间 - 2026-02-01 00:00:00 点击率:次document.cookie 是分号分隔的字符串而非键值对象,读写需手动解析与拼接;存敏感信息如 token 易受 XSS 攻击,应优先用 HttpOnly + Secure Cookie 配合 Authorization 请求头;前端状态推荐 localStorage 或 sessionStorage。
JavaScript 中 document.cookie 的基本读写逻辑
原生操作 Cookie 并不复杂,但容易误以为它是类似 localStorage 的键值对对象——实际上它是一段用分号分隔的字符串,每次读取都得手动解析,写入也得拼接完整格式。
写入示例:document.cookie = "token=abc123; path=/; expires=Wed, 01 Jan 2025 00:00:00 GMT; Secure; HttpOnly";
注意:这里 HttpOnly 是服务端设置的,JS 无法通过 document.cookie 写入该标志;Secure 表示仅在 HTTPS 下发送,JS 可以声明,但无效(浏览器忽略)。
- 必须显式指定
path,否则默认为当前路径,导致跨路由读不到 -
expires或max-age缺失时,Cookie 变成会话级(关闭浏览器即失效) - 中文或特殊字符需先
encodeURIComponent(),否则可能截断或报错
为什么不能用 document.cookie 存 token 或敏感状态
因为 document.cookie 暴露在 JS 环境中,XSS 攻击可直接窃取。哪怕加了 HttpOnly,那 JS 就根本读不到——这恰恰说明:如果 JS 需要读写,它就一定不是 HttpOnly。
-
前端存 token 做自动鉴权?优先走
Authorization: Bearer xxx请求头,token 由后端下发并设为HttpOnly+Secure - 若必须前端维护状态(如语言偏好、主题),用
localStorage更合适,且无需担心过期逻辑 - 需要服务端参与的状态(如登录态),Cookie 仅作传输载体,真实校验和续期全由后端控制
封装一个安全可用的 Cookie 工具函数
避免每次手动拼字符串出错,建议封装最小可用函数,只处理编码、路径、过期时间等基础项,不尝试模拟对象 API。
function setCookie(name, value, options = {}) {
let cookieStr = `${name}=${encodeURIComponent(value)}`;
if (options.expires) cookieStr += `; expires=${options.expires.toUTCString()}`;
if (options.maxAge) cookieStr += `; max-age=${options.maxAge}`;
if (options.path) cookieStr += `; path=${options.path}`;
if (options.domain) cookieStr += `; domain=${options.domain}`;
if (options.secure) cookieStr += '; secure';
document.cookie = cookieStr;
}
function getCookie(name) {
const match = document.cookie.match(new RegExp(`(^| )${name}=([^;]+)`));
return match ? decodeURICompone
nt(match[2]) : null;
}
- 不支持
SameSite自动注入,需手动传options.sameSite = 'Strict'并拼进字符串 - 删除 Cookie:调用
setCookie('name', '', { expires: new Date(0) }) - 不要试图用正则匹配多个同名 Cookie,浏览器只返回第一个匹配项
现代替代方案比 Cookie 更适合前端状态管理
除非明确需要服务端读取或依赖浏览器自动携带(如传统表单提交),否则大多数用户状态不需要 Cookie。
- 纯前端状态(如折叠菜单、暗色模式):用
localStorage+useEffect(React)或事件监听同步 - 需要服务端感知但又不想暴露敏感字段:用短时效
sessionStorage存非敏感标识,后端用该标识查 session - SSR/SEO 场景下需首屏读取状态:服务端渲染时注入到
window.__INITIAL_STATE__,前端优先读它
真正难的不是怎么写 Cookie,而是判断「这个状态到底该不该放 Cookie 里」——多数时候答案是否定的。
# react
# javascript
# java
# js
# 前端
# cookie
# seo
# 编码
# 浏览器
# 工具
# session
# 后端
# xss
# 封装
# date
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
怎么制作网站设计模板图片,有电商商品详情页面的免费模板素材网站推荐吗?
韩国网站服务器搭建指南:VPS选购、域名解析与DNS配置推荐
html文件怎么打开证书错误_https协议的html打开提示不安全【指南】
Laravel怎么集成Log日志记录_Laravel单文件与每日日志配置及自定义通道【详解】
Win11应用商店下载慢怎么办 Win11更改DNS提速下载【修复】
如何用ChatGPT准备面试 模拟面试问答与职场话术练习教程
油猴 教程,油猴搜脚本为什么会网页无法显示?
如何快速配置高效服务器建站软件?
jQuery中的100个技巧汇总
香港服务器网站推广:SEO优化与外贸独立站搭建策略
Laravel如何发送邮件和通知_Laravel邮件与通知系统发送步骤
如何用y主机助手快速搭建网站?
DeepSeek是免费使用的吗 DeepSeek收费模式与Pro版本功能详解
Laravel如何实现全文搜索_Laravel Scout集成Algolia或Meilisearch教程
如何自定义建站之星模板颜色并下载新样式?
图册素材网站设计制作软件,图册的导出方式有几种?
如何有效防御Web建站篡改攻击?
网站制作壁纸教程视频,电脑壁纸网站?
Laravel如何实现全文搜索功能?(Scout和Algolia示例)
微信h5制作网站有哪些,免费微信H5页面制作工具?
公司网站制作需要多少钱,找人做公司网站需要多少钱?
VIVO手机上del键无效OnKeyListener不响应的原因及解决方法
谷歌Google入口永久地址_Google搜索引擎官网首页永久入口
java获取注册ip实例
Laravel怎么实现验证码(Captcha)功能
PHP的CURL方法curl_setopt()函数案例介绍(抓取网页,POST数据)
如何在建站之星绑定自定义域名?
HTML 中如何正确使用模板变量为元素的 name 属性赋值
如何用AWS免费套餐快速搭建高效网站?
西安专业网站制作公司有哪些,陕西省建行官方网站?
INTERNET浏览器怎样恢复关闭标签页_INTERNET浏览器标签恢复快捷键与方法【指南】
如何快速查询网站的真实建站时间?
Laravel如何生成和使用数据填充?(Seeder和Factory示例)
敲碗10年!Mac系列传将迎来「触控与联网」双革新
EditPlus中的正则表达式 实战(1)
Edge浏览器怎么启用睡眠标签页_节省电脑内存占用优化技巧
Java类加载基本过程详细介绍
深圳网站制作设计招聘,关于服装设计的流行趋势,哪里的资料比较全面?
如何选择可靠的免备案建站服务器?
Laravel Blade组件怎么用_Laravel可复用视图组件的创建与使用
Laravel storage目录权限问题_Laravel文件写入权限设置
今日头条微视频如何找选题 今日头条微视频找选题技巧【指南】
Android仿QQ列表左滑删除操作
Laravel如何配置.env文件管理环境变量_Laravel环境变量使用与安全管理
成都品牌网站制作公司,成都营业执照年报网上怎么办理?
如何用VPS主机快速搭建个人网站?
Laravel如何实现本地化和多语言支持?(i18n教程)
Laravel如何实现API资源集合?(Resource Collection教程)
Laravel怎么做数据加密_Laravel内置Crypt门面的加密与解密功能
Swift中swift中的switch 语句


