1. 程式人生 > >HTML5學習之關於Cookie的expires過期時間無效分析

HTML5學習之關於Cookie的expires過期時間無效分析

被人 html5學習 com 自動 TP 電腦 除了 和我 使用

在學習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使用本地時間可被人利用實現永久免登陸驗.

HTML5學習之關於Cookie的expires過期時間無效分析