瀏覽器關閉后,Session就銷毀了嗎?


https://blog.csdn.net/QQ1012421396/article/details/70842148

話題:
       當瀏覽器關閉后,Session就銷毀了嗎?
答案:
        存在於瀏覽器上的唯一標識符JSESSIONID(sessionid)消失了,但是服務器中存放的sessionid並沒有立馬銷毀。
分析:
       我們知道Session是JSP的九大內置對象(也叫隱含對象)中的一個,它的作用是可以保存當前用戶的狀態信息,初學它的時候,認為Session的生命周期是從打開一個瀏覽器窗口發送請求到關閉瀏覽器窗口,但其實這種說法是不正確的!當一個Session開始時,Servlet容器會創建一個HttpSession對象,那么在HttpSession對象中,可以存放用戶狀態的信息,Servlet容器為HttpSession對象分配一個唯一標識符即Sessionid,Servlet容器把Sessionid作為一種Cookie保存在客戶端的瀏覽器 中用戶每次發出Http請求時,Servlet容器會從HttpServletRequest對象中取出Sessionid,然后根據這個Sessionid找到相應的HttpSession對象,從而獲取用戶的狀態信息。

       其實讓Session結束生命周期,有以下兩種辦法:

       一個是Session.invalidate()方法,不過這個方法在實際的開發中,並不推薦,可能在強制注銷用戶的時候會使用;

       一個是當前用戶和服務器的交互時間超過默認時間后,Session會失效。

       我們知道Session是存在於服務器端的,當把瀏覽器關閉時,瀏覽器並沒有向服務器發送任何請求來關閉Session,自然Session也不會被銷毀,但是可以做一點努力,在所有的客戶端頁面里使用js的window.onclose來監視瀏覽器的關閉動作,然后向服務器發送一個請求來關閉Session,但是這種做法在實際的開發中也是不推薦使用的,最正常的辦法就是不去管它,讓它等到默認的時間后,自動銷毀。那么為什么當我們關閉瀏覽器后,就再也訪問不到之前的session了呢?其實之前的Session一直都在服務器端,而當我們關閉瀏覽器時,此時的Cookie是存在於瀏覽器的進程中的,當瀏覽器關閉時,Cookie也就不存在了。

       其實Cookie有兩種:

       一種是存在於瀏覽器的進程中;

       一種是存在於硬盤上。

       而session的Cookie是存在於瀏覽器的進程中,那么這種Cookie我們稱為會話Cookie,當我們重新打開瀏覽器窗口時,之前的Cookie中存放的Sessionid已經不存在了,此時服務器從tpServletRequest對象中沒有檢查到sessionid,服務器會再發送一個新的存有Sessionid的Cookie到客戶端的瀏覽器中,此時對應的是一個新的會話,而服務器上原先的session等到它的默認時間到之后,便會自動銷毀。

 

附加:
當在同一個瀏覽器中同時打開多個標簽,發送同一個請求或不同的請求,仍是同一個session;

當不在同一個窗口中打開相同的瀏覽器時,發送請求,仍是同一個session;

當使用不同的瀏覽器時,發送請求,即使發送相同的請求,是不同的session;

當把當前某個瀏覽器的窗口全關閉,再打開,發起相同的請求時,是不同的session。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM