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

  • Post author:
  • Post category:其他


在学习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使用本地时间可被人利用实现永久免登陆验.