在学习Cookie的过程中发现Cookie设置过期时间后,过了设定时间Cookie并不会自动删除,重启浏览器甚至是重启电脑后重新打开网页还是不会自动删除,在百度等其他网站控制台设置也一样结果.对此现象我展开了深入分析.
首先在检查语法无错误的情况下,直接在控制台上输入
document.cookie = 'aa=bb;expires='+new Date()+';path=/'
返回:
"aa=bb;expires=Sun Apr 29 2018 14:27:56 GMT+0800 (中国标准时间);path=/"
表明 aa这条记录会在2018年4月29日14:27:56删除
由于new Date()是获取本地运行时的时间,那么按照常理来说这条Cookie在生成1秒后就已经过期了.会直接被浏览器删除而不会出现才对.可在我再次输入document.cookie获取所有Cookie时返回aa=bb,说明此Cookie还存在没有被删除.再尝试多次后,发现即时我将时间设置为过期时间
document.cookie = 'aa=bb;expires= Sun Apr 29 2018 10:27:56 GMT+0800 (中国标准时间);path=/'
还是没有被删除.在设置到2018 6:27:00时居然被浏览器删除了!!!
结合chrome不支持本地文件的cookie读写我提出一种假设.Cookie过期时间不是以本地时间应该是服务器时间,可浏览器如何获取服务器时间呢?突然我想到了以前看到的HTTP协议.响应的HTTP协议头部是带服务器时间的.我立马祭出抓包神器Fiddler对浏览器进行抓包.
发现果然!!!
SublimeServer架设的服务器居然不是本地时间为2018 06:57:36这正和我之前尝试得到的时间相差不远
我立马在浏览器里输入
document.cookie = 'aa=bb;expires= Sun, 29 Apr 2018 07:00:00 GMT ;path=/'
3分钟后查看. cookie成功被浏览器删除!!!继续在百度网页测试
浏览器Network里捕获到百度服务器时间为
Sun, 29 Apr 2018 07:08:01 GMT
百度的服务器时间居然不是北京时间!!!!!!!
增加2分钟时间后在百度网页的控制设置Cookie
document.cookie = 'aa=bb;expires= Sun, 29 Apr 2018 08:00:00 GMT;path=/'
等2分钟后,重新获取.aa成功被浏览器删除此问题成功解决!!!
得出结论cookie设置的过期时间是以服务器时间为基准,在浏览器得到服务器的任何HTTP响应头后会将浏览器的时间与服务器同步.而使用new Date()获取的本地时间并不准确.与服务器相差很大.本地时间可被客户修改.如果cookie使用本地时间可被人利用实现永久免登陆验.