一直好奇關於Session的過期,一種說法是關閉瀏覽器即Session失效,另一種說法是可以設置Session的過期時間,時間到了自動過期。
這兩種說法到底是怎么回事?Session過期跟Cookie過期又有什么關系?
網上搜了幾篇相關文章:
- http://www.cnblogs.com/Vae1990Silence/p/4630392.html
- http://blog.csdn.net/quiet_girl/article/details/50580095
- https://www.cisco.com/c/en/us/products/collateral/security/web-security-appliance/cn/117925-technote-csc-00.html
通過閱讀上面幾篇文章后,對Session過期有了新的理解,簡單總結一下:
- Cookie保存在客戶端瀏覽器,Session保存在服務器。
- Cookie可以設置過期時間。
- 如果Cookie不包含到期日期,則可視為會話Cookie(Session Cookie)。會話Cookie存儲在客戶端的內存(瀏覽器占用的內存)中,決不會寫入磁盤。當瀏覽器關閉時,Cookie將從此永久丟失。
- 如果Cookie包含到期日期,則可視為持久性Cookie,存儲在客戶端的磁盤中。在指定的到期日期,Cookie將從磁盤中刪除。
- 客戶端請求服務端時,如果客戶端的Cookie中沒有當前會話的Session Id,則服務端會新分配一個Session,並將與該Session對應的Session Id存到Cookie中發回給客戶端瀏覽器。
- 由於大部分的網站在發回Session Id時使用了會話Cookie(即沒有設置過期時間),導致該Cookie存在客戶端內存中,所以關閉瀏覽器即丟失了Session Id信息,再次訪問服務端時才找不到對應的Session,於是才有了“關閉瀏覽器則Session過期”的說法!
- 服務端在保存Session時也可以設置該Session的過期時間,服務端的Web服務容器通常也有一個默認的過期時間。若訪問服務器后,保持不關閉瀏覽器一段時間,超過Session過期時間后再次訪問,會發現依然Session過期找不到了(比如表現為跳轉到登錄頁面),則是“沒有關瀏覽器但Session過期了”!
- 當(存放着Session Id的)Cookie和Session中兩者有任一過期,即宣告會話過期。
另外,關於Java中設置Session的過期,參考:http://www.cnblogs.com/diewufeixian/p/4221747.html
總結一下方法有三:
- 在web容器中(如Tomcat)修改配置文件
- 在工程的web.xml中設置
- 創建Session后通過java代碼設置