首頁 > web前端 > js教程 > 主體

Session的生命週期

一个新手
發布: 2017-09-13 10:16:04
原創
1448 人瀏覽過

以前在學習的時候沒怎麼注意,今天又回過頭來仔細研究研究了一下Session的生命週期。

  Session儲存在伺服器端,一般為了防止在伺服器的記憶體中(為了高速存取),Sessinon在使用者存取第一次存取伺服器時創建,需要注意只有存取JSP、Servlet等程式時才會建立Session,只存取HTML、IMAGE等靜態資源並不會建立Session,可呼叫request.getSession(true)強制產生Session。

  Session何時失效?

  1. 伺服器會把長時間沒有活動的Session從伺服器記憶體中清除,此時Session便失效。 Tomcat中Session的預設失效時間為20分鐘。

  2. 呼叫Session的invalidate方法。

  Session對瀏覽器的要求:

################################################################### ## ### ######雖然Session保存在伺服器,對客戶端是透明的,它的正常運作仍然需要客戶端瀏覽器的支援。這是因為Session需要使用Cookie作為識別標誌。 HTTP協定是無狀態的,Session不能依據HTTP連線來判斷是否為同一客戶,因此伺服器向客戶端瀏覽器發送一個名為JSESSIONID的Cookie,它的值為該Session的id(也就是HttpSession.getId()的返回值)。 Session依據該Cookie來辨識是否為同一使用者。 ######   此Cookie為伺服器自動產生的,它的maxAge屬性一般為-1,表示僅當前瀏覽器內有效,且各瀏覽器視窗間不共享,關閉瀏覽器就會失效。因此同一機器的兩個瀏覽器視窗存取伺服器時,會產生兩個不同的Session。但是由瀏覽器視窗內的連結、腳本等開啟的新視窗(也就是說不是雙擊桌面瀏覽器圖示等開啟的視窗)除外。這類子視窗會共用父視窗的Cookie,因此會共用一個Session。 ###

   注意:新開的瀏覽器視窗會產生新的Session,但子視窗除外。子視窗會共用父視窗的Session。例如,在連結上按右鍵,在彈出的快速選單中選擇"在新視窗中開啟"時,子視窗便可存取父視窗的Session。

 如果客戶端瀏覽器將Cookie功能停用,或不支援Cookie怎麼辦?例如,絕大多數的手機瀏覽器都不支援Cookie。 Java Web提供了另一個解決方案:URL位址重寫。

  URL位址重寫是對客戶端不支援Cookie的解決方案。 URL位址重寫的原理是將該使用者Session的id資訊重寫到URL位址中。伺服器能夠解析重寫後的URL取得Session的id。這樣即使客戶端不支援Cookie,也可以使用Session來記錄使用者狀態。 HttpServletResponse類別提供了encodeURL(String url)實作URL位址重寫,該方法會自動判斷客戶端是否支援Cookie。如果客戶端支援Cookie,會將URL原封不動地輸出來。如果客戶端不支援Cookie,則會將使用者Session的id重寫到URL中。

  注意:TOMCAT判斷客戶端瀏覽器是否支援Cookie的依據是請求中是否含有Cookie。雖然客戶端可能會支援Cookie,但是由於第一次要求時不會攜帶任何Cookie(因為沒有任何Cookie可以攜帶),URL位址重寫後的位址中仍然會帶有jsessionid。當第二次訪問時伺服器已經在瀏覽器中寫入Cookie了,因此URL位址重寫後的位址中就不會帶有jsessionid了。

#

以上是Session的生命週期的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板