|
我昨天清浏览器缓存,存储把所有登录状态都弄丢了。存储得重新输一遍密码,存储烦得要命。存储但这就是存储cookie的代价——它本来就是记在浏览器里的小纸条,你删了它,存储网站就翻脸不认人。存储 cookie这东西,存储说白了就是存储服务器塞给你的一段文本。你访问一个网站,存储服务器说,存储喏,存储拿着这个编号,存储下次来的存储时候亮出来就行。它不记你的存储名字,不存你的密码,只认这个随机字符串。你关掉浏览器再打开,只要cookie还在,网站就还认得你。这就是为什么你每次打开知乎都不用重新登录,也是为什么你购物车里的东西过了一夜还在。 但cookie分两种,这个坑很多人踩过。一种是会话cookie,存在内存里,浏览器一关就蒸发。另一种是持久cookie,直接写进硬盘文件里,设个过期时间,可能是明天,也可能是三年后。你平时说的"记住我"勾选框,控制的就是这个过期时间。我见过有人勾了"记住我",结果在公共电脑上忘了退出,后来那台机器的下一个使用者直接进了他的网银——这不是cookie的错,是你没分清场合。 第三方cookie才是真正的麻烦精。你逛A网站,A网站里嵌了B网站的广告,B就在你浏览器里种一个cookie。下次你去C网站,C也嵌了B的广告,B一看,哦,还是你,于是它就知道你最近看了什么,然后给你推"你可能会喜欢"的垃圾广告。整个互联网就这么被串起来了。欧盟GDPR逼着网站弹窗问你"接受cookie吗",你以为那是礼貌,其实那是法律强制要求的——但大多数人直接点"接受",连看都不看。 我自己做过一个小网站,给朋友用的那种。当时我存cookie没设HttpOnly标志,结果被XSS攻击差点把会话劫持走。那之后我才明白,cookie不是存了就完事,你得管好它的属性。Secure标志要求只能走HTTPS,SameSite可以限制跨站请求,Domain和Path控制作用范围。这些参数写错一个,你的cookie就可能被偷走,或者发给不该发的服务器。 现在很多前端框架推荐用localStorage替代cookie,说容量大、不随请求发送。但localStorage没有过期时间,你手动删,删不干净就是永久残留。cookie至少有浏览器自带的清理机制,你清历史记录的时候能顺手清掉。各有各的烂法。 我建议你定期翻翻浏览器的cookie列表,看看哪些网站给你种了合同期超长的cookie。Chrome里设置→隐私→Cookie,能看到每个站点存了什么。看到那种你只访问过一次、却存了十年有效期的cookie,直接删掉,别犹豫。这年头,连你常去的新闻网站都可能偷偷给你种追踪cookie,你不主动清理,它们就永远赖在你硬盘里。 |