上一节我们详细讲解了JS中的定时器,本节我们将学习JS中的cookie。“cookie”意为“曲奇”,在前端领域,我们只需要把它理解为少量文本数据即可,它作用于浏览器和服务端的数据传输。
为什么需要cookie?
答:浏览器和服务端通过http通信,由于http具有无状态性,所以需要临时存储有效信息“对暗号”,使得客户端和服务端相互认识,期间cookie就扮演着维护关系的角色。
cookie仅仅是扮演临时数据存储的角色吗?
答:cookie既能存储临时数据也能维护长期数据。比如我们在线购物时,就有cookie维护临时数据,存储我们放在购物车里的东西;而在用户个性化设置方面,Cookie 可以长期保存用户的主题选择、语言偏好、字体大小等设置。
这里我演示一下浏览器里的cookie:

怎么看?
名称-值:这一看就是kv键值对结构了。
Domain:定义了 哪些网站(域名) 可以接收和发送这个 Cookie。
path:在同一个域名下,进一步限制 Cookie 的 “可见范围” 到某个特定的路径(文件夹)及其子路径。
Expires、Max-Age:Cookie 的 生命周期控制属性,它们决定了 Cookie 在什么时候会“过期”并被浏览器自动删除。
Secure、HttpOnly:Cookie 的 安全属性,它们不控制生命周期,而是控制 Cookie 的 访问和传输方式,对系统安全至关重要。
Priority:一个相对较少使用但很有用的 Cookie 属性,它主要帮助浏览器在 Cookie 存储空间不足时 决定哪些 Cookie 应该被优先保留。
SameParty:新且特定用途的 Cookie 属性,它用于解决在现代隐私保护环境下同一公司(同一主体)不同域名间安全共享 Cookie 的问题。
SameSite:现代且极其重要 的 Cookie 安全属性,它专门用来防御 CSRF(跨站请求伪造) 攻击。
这里我们实际设置一下cookie,主要是通过document.cookie来设置:document.cookie = "键=值; 属性1; 属性2"。请注意,一次赋值通常只设置或更新一个Cookie,如需设置多个,需分别赋值。
document.cookie = 'address=dotcpp.com;max-age=30'//cookie存在时间为30s
注意:如果你将上述代码保存在本地HTML文件中直接运行,由于浏览器的安全策略,可能无法成功设置Cookie。要完整体验Cookie的功能,请确保通过Web服务器(如 http://localhost)访问你的页面。你可以在VS Code中安装 Live Server 扩展,或使用 python -m http.server 命令来快速启动一个本地服务器进行测试。
Cookie的使用需要谨慎,因为它们可能会影响用户的隐私和安全。这里我们通过一张表格看看使用cookie时有哪些注意事项:
| 注意事项 | 具体要求 | 风险说明 |
|---|---|---|
| 数据安全 | 仅存储非敏感数据(如用户名),禁止存储密码、哈希等敏感信息 | 防止信息泄露导致安全漏洞 |
| 过期时间 | 设置合理的过期时间,会话结束时及时清除 | 避免长期留存增加风险 |
| 路径限制 | 仅在必要页面设置,避免全站滥用 | 减少隐私泄露范围 |
| HTTPOnly标志 | 对敏感Cookie启用,禁止JavaScript访问 | 有效防御XSS攻击 |
| 合法性合规 | 遵守隐私法规,获取用户同意 | 避免法律风险 |
| 数据清理 | 使用后及时清理旧数据,更新时删除旧Cookie | 防止数据冗余和误用 |
| 大小限制 | 单个Cookie不超过4KB,大量数据使用JSON分拆 | 避免传输失败 |
| 类型限制 | 仅存储字符串,复杂对象需序列化 | 确保数据可被正确处理 |
总结:本文为读者详细介绍了JS中的cookie,以及如何创建cookie,并枚举了使用cookie时的注意事项,让读者对JS中的cookie有一个全面的了解。
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程