JavaScript 設定Cookie過期時間無效
到達過期時間之後,Cookie會被自動刪除,這也是Cookie刪除操作的實現原理。
有時雖然設定了過期時間(沒有任何語法錯誤),但是到達過期時間之後,cookie並未被刪除。
下面介紹一種非常具有迷惑性Cookie過期時間無效的情況,供大家參考。
一.現象描述:
通過谷歌瀏覽器控制檯在螞蟻部落寫入如下Cookie:
[JavaScript] 純文字檢視 複製程式碼document.cookie = 'softwhy="螞蟻部落";expires='+new Date()+';path=/'
控制檯執行效果截圖如下:
程式碼分析如下:
(1).document.cookie屬性新增一個Cookie,name是softwhy,value是字串"螞蟻部落"。
(2).new Date()獲取的是客戶端本地當前日期時間,也就是說Cookie會立馬過期。
但實際情況是,此Cookie並沒有被立馬刪除,依然可以通過document.cookie屬性獲取:
上述程式碼是在谷歌瀏覽器的表現,但是在火狐瀏覽器表現是正常的。
二.原因分析:
下面通過谷歌開發者工具檢視一下上述Cookie的過期時間:
時間分析如下:
(1).對比這個Cookie實際過期時間與控制檯返回的時間。
(2).發現北京時間被谷歌瀏覽器粗暴修改為GMT/UTC時間,沒有進行換算。
(3).在前端可以認為GMT與UTC時間完全是一回事,都是指格林尼治標準時間。
(4).由於北京時區是東八區,所以UTC/GMT+8=北京時間。
(5).所以上面Cookie真正過期時間並不是北京時間2019年11月13日22:04:15,而是再延後8小時。
(6).火狐瀏覽器進行了正確處理,並不會粗暴處理北京時間,而是將北京時間合理轉換為GMT/UTC時間。
三.正確設定過期時間:
下面給出正確設定過期時間的方式,程式碼如下:
[JavaScript] 純文字檢視 複製程式碼document.cookie = 'softwhy="螞蟻部落";expires='+new Date().toUTCString()+';path=/'
通過方法將其轉換為GMT/UTC時間,然後再去設定過期時間。
關於Cookie過期更多內容可以參閱如下幾篇文章:
(1).JavaScript 刪除Cookie一章節。
(2).Cookie max-age與expires 區別一章節。
(3).max-age設定Cookie過期時間一章節。
相關文章
- JavaScript 設定cookie 過期時間JavaScriptCookie
- JavaScript設定cookie立即過期JavaScriptCookie
- localStorage設定過期時間
- redis設定過期時間Redis
- 檢視Cookie過期時間Cookie
- [BUG反饋]OneThink1.1.141212中的儲存sessionid的cookie過期時間無效的解決SessionCookie
- 如何給localStorage設定一個過期時間?
- tomcat 設定session過期時間(四種方式)TomcatSession
- C# 給PDF文件設定過期時間C#
- cookie時效無限延長方案Cookie
- 通過offsets.retention.minutes設定kafkaoffset的過期時間Kafka
- Cookie 作用,互動過程解析,設定,獲取,刪除,生效時間的設定Cookie
- 優雅的快取解決方案--設定過期時間快取
- 關於 session 未到設定的過期時間就過期的問題(分享坑點)Session
- httpsession過期時間HTTPSession
- redis 過期時間Redis
- 面試官:RabbitMQ過期時間設定、死信佇列、延時佇列怎麼設計?面試MQ佇列
- Passport 設定token 過期時間盡然不生效!這是為什麼?Passport
- laravel8 時區設定無效解決辦法Laravel
- redis hset hmset過期時間Redis
- GitLab 中文版如何設定密碼長度、複雜度以及過期時間?Gitlab密碼複雜度
- 建立帶過期時間的map
- RabbitMQ 高階 - 過期時間 TTLMQ
- redis 設定過期時間,以資料夾形式展示key顯示快取資料Redis快取
- cookie的設定Cookie
- 如何設定CookieCookie
- libevent設定超時後取消超時(bufferevent_set_timeouts取消超時無效問題)
- ios10以下safari設定style無效iOS
- Android Studio 設定自動清除無效 importAndroidImport
- 對於Redis中設定了過期時間的Key,你需要知道這些內容Redis
- [ASP.NET] 如果將快取“滑動過期時間”設定為1秒會怎樣?ASP.NET快取
- 如何設定cookie和刪除cookieCookie
- Oracle 密碼永不過期設定Oracle密碼
- vue中設定height:100%無效的問題Vue
- Job 類中 $timeout 設定無效 ? - 已關閉
- and-design-vue設定dropdownClassName無效的問題Vue
- python flask 設定cookiePythonFlaskCookie
- postman如何設定cookiePostmanCookie