您现在的位置是:探索 >>正文
js存储cookie
探索624人已围观
简介浏览器里存点东西,最土的办法就是cookie。它就是个文本小纸条,服务器塞给你,你揣兜里,下次再去人家门口,掏出来给人看一眼。别嫌它老,HTTP协议本来就是个没记性的家伙,每次请求都当你是陌生人,co ...
浏览器里存点东西,存储最土的存储办法就是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不难,难的是搞清楚它在你整个站点架构里扮演什么角色。别拿它当数据库使,它就是一张便利贴——记性不好,容易丢,但随手贴随手撕,确实方便。
Tags:
下一篇:微软官方网站下载win7
相关文章
入侵女儿国游戏
探索凌晨三点,我第五次在女儿国的边界线上被巡逻队拦下。她们穿着银白色的铠甲,手里的长矛在月光下泛着冷光,为首的队长用剑尖挑起我的衣领,说:“男人,这里不欢迎你。” 这不是我第一次来。三年前我第一次误闯这片 ...
【探索】
阅读更多四川蜀美科技有限公司
探索四川蜀美科技有限公司的车间里,机器声像闷雷一样滚过地面。我去的时候,正赶上他们调试一条新的灌装线,不锈钢管道在灯光下泛着冷光,几个工人围在控制屏前,没人抬头看我。 这家公司做的是食品级包装材料,具体点 ...
【探索】
阅读更多反渗透常见问题
探索反渗透膜产水量突然下降,十有八九不是膜本身坏了,而是系统里某个不起眼的环节在捣鬼。 去年夏天我去过一家电子厂,他们的二级反渗透系统刚运行三个月,产水量就从设计的每小时20吨掉到了12吨。操作工急得直跺 ...
【探索】
阅读更多