HTML5学习之关于Cookie的expires过时时间无效分析(转)

在学习Cookie的过程当中发现Cookie设置过时时间后,过了设定时间Cookie并不会自动删除,重启浏览器甚至是重启电脑后从新打开网页仍是不会自动删除,在百度等其余网站控制台设置也同样结果.对此现象我展开了深刻分析.chrome

首先在检查语法无错误的状况下,直接在控制台上输入浏览器

document.cookie = 'aa=bb;expires='+new Date()+';path=/'服务器

返回:cookie

"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=/'blog

仍是没有被删除.在设置到2018 6:27:00时竟然被浏览器删除了!!!同步

结合chrome不支持本地文件的cookie读写我提出一种假设.Cookie过时时间不是以本地时间应该是服务器时间,可浏览器如何获取服务器时间呢?忽然我想到了之前看到的HTTP协议.响应的HTTP协议头部是带服务器时间的.我立马祭出抓包神器Fiddler对浏览器进行抓包.百度

发现果真!!!

HTML5学习之关于Cookie的expires过时时间无效分析

SublimeServer架设的服务器竟然不是本地时间为2018 06:57:36这正和我以前尝试获得的时间相差不远

我立马在浏览器里输入

document.cookie = 'aa=bb;expires= Sun, 29 Apr 2018 07:00:00 GMT ;path=/'

3分钟后查看. cookie成功被浏览器删除!!!继续在百度网页测试

HTML5学习之关于Cookie的expires过时时间无效分析

浏览器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使用本地时间可被人利用实现永久免登录验.

相关文章
相关标签/搜索