在學習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對瀏覽器進行抓包.百度
發現果真!!!
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使用本地時間可被人利用實現永久免登錄驗.