上一节我们详细讲解了JS中的定时器,本节我们将学习JS中的cookie。“cookie”意为“曲奇”,在前端领域,我们只需要把它理解为少量文本数据即可,它作用于浏览器和服务端的数据传输。

为什么需要cookie?

答:浏览器和服务端通过http通信,由于http具有无状态性,所以需要临时存储有效信息“对暗号”,使得客户端和服务端相互认识,期间cookie就扮演着维护关系的角色。

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有一个全面的了解。

点赞(176)

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

Dotcpp在线编译      (登录可减少运行等待时间)