当前位置: 当前位置:首页 > 探索 > js存储cookie正文

js存储cookie

作者:知识 来源:娱乐 浏览: 【大 中 小】 发布时间:2026-10-17 06:12:21 评论数:

浏览器里存点东西,存储最土的存储办法就是cookie。它就是存储个文本小纸条,服务器塞给你,存储你揣兜里,存储下次再去人家门口,存储掏出来给人看一眼。存储别嫌它老,存储HTTP协议本来就是存储个没记性的家伙,每次请求都当你是存储陌生人,cookie算是存储硬给它装了个临时记忆。

写cookie的存储代码简单得有点无聊。直接操作document.cookie就行,存储比如:

document.cookie = "username=张三; path=/; max-age=3600";

这一行干了三件事:存了个键值对,存储限定路径是存储整个站点,设定一小时有效期。注意,这里没有分号结尾的语法糖,你每次赋值,它不会覆盖别的cookie,只是追加或者更新同名的那个。你要是连着写两行不同名字的cookie,最后document.cookie读出来是个分号分隔的长字符串,有点像超市小票。

麻烦就在读取上。document.cookie不是对象,不是数组,就是个字符串。想拿某个值,你得自己split,自己遍历,自己解码。我见过不少新手在这儿栽跟头——直接拿indexOf去查,结果把"username"和"username2"搞混。别偷懒,写个解析函数,几行的事,但能省掉你半夜调试的血压。

删cookie更反直觉。没有专门的remove方法,你得把过期时间设成过去的时间点。比如:

document.cookie = "username=; path=/; max-age=0";

max-age为0或者负数,浏览器立马撕掉这张纸条。你要是忘了带path=/,那就有意思了——你在/page1设置的cookie,在/page2根本看不见,你以为删掉了,其实它躲在别的路径底下好好活着。

真正要命的是HttpOnly这个属性。如果你用JavaScript操作cookie,那这个属性基本跟你无关——它专门防你这种脚本去读cookie。服务端设置的HttpOnly cookie,document.cookie里压根不显示。这是XSS攻击的防线,但反过来也说明,纯前端存敏感信息,cookie不是个好容器。

还有SameSite。以前大家不关心,后来Chrome默认把它设成Lax,跨站请求就不带cookie了。你要是做第三方嵌入的iframe,或者前端调跨域接口,不设置SameSite=None; Secure,cookie就静默失踪。排查半天,最后发现是浏览器策略,那种感觉,像是被门卫拦了,证件齐全但就是不让进。

个人看法:cookie适合存会话标识、用户偏好这类低敏感度的东西。存token?勉强可以,但得配短过期时间。存密码?那是给自己挖坑。localStorage容量更大,但XSS一打就全裸奔。cookie至少有个HttpOnly的选项能挡一下脚本读取,算是矮子里拔将军。

最后提醒一句,cookie的4KB大小限制是硬性的。超了,浏览器静默丢弃,不报错。你存个大字符串进去,下次读出来发现被截断,那感觉就像写日记写到一半,纸被撕了,你还不知道哪一页出了问题。

写cookie不难,难的是搞清楚它在你整个站点架构里扮演什么角色。别拿它当数据库使,它就是一张便利贴——记性不好,容易丢,但随手贴随手撕,确实方便。