Docker 的優(yōu)點
645
2025-03-31
Session存儲在服務(wù)器端,一般為了防止在服務(wù)器的內(nèi)存中(為了高速存取),Sessinon在用戶訪問第一次訪問服務(wù)器時創(chuàng)建,需要注意只有訪問JSP、Servlet等程序時才會創(chuàng)建Session,只訪問HTML、IMAGE等靜態(tài)資源并不會創(chuàng)建Session,可調(diào)用request.getSession(true)強制生成Session。
Session什么時候失效?
1. 服務(wù)器會把長時間沒有活動的Session從服務(wù)器內(nèi)存中清除,此時Session便失效。Tomcat中Session的默認失效時間為30分鐘。
2. 調(diào)用Session的invalidate方法。
Session對瀏覽器的要求:
雖然Session保存在服務(wù)器,對客戶端是透明的,它的正常運行仍然需要客戶端瀏覽器的支持。這是因為Session需要使用Cookie作為識別標志。HTTP協(xié)議是無狀態(tài)的,Session不能依據(jù)HTTP連接來判斷是否為同一客戶,因此服務(wù)器向客戶端瀏覽器發(fā)送一個名為JSESSIONID的Cookie,它的值為該Session的id(也就是HttpSession.getId()的返回值)。Session依據(jù)該Cookie來識別是否為同一用戶。
該Cookie為服務(wù)器自動生成的,它的maxAge屬性一般為-1,表示僅當前瀏覽器內(nèi)有效,并且各瀏覽器窗口間不共享,關(guān)閉瀏覽器就會失效。因此同一機器的兩個瀏覽器窗口訪問服務(wù)器時,會生成兩個不同的Session。但是由瀏覽器窗口內(nèi)的鏈接、腳本等打開的新窗口(也就是說不是雙擊桌面瀏覽器圖標等打開的窗口)除外。這類子窗口會共享父窗口的Cookie,因此會共享一個Session。
注意:新開的瀏覽器窗口會生成新的Session,但子窗口除外。子窗口會共用父窗口的Session。例如,在鏈接上右擊,在彈出的快捷菜單中選擇"在新窗口中打開"時,子窗口便可以訪問父窗口的Session。
如果客戶端瀏覽器將Cookie功能禁用,或者不支持Cookie怎么辦?例如,絕大多數(shù)的手機瀏覽器都不支持Cookie。Java Web提供了另一種解決方案:URL地址重寫。
URL地址重寫是對客戶端不支持Cookie的解決方案。URL地址重寫的原理是將該用戶Session的id信息重寫到URL地址中。服務(wù)器能夠解析重寫后的URL獲取Session的id。這樣即使客戶端不支持Cookie,也可以使用Session來記錄用戶狀態(tài)。HttpServletResponse類提供了encodeURL(String url)實現(xiàn)URL地址重寫,該方法會自動判斷客戶端是否支持Cookie。如果客戶端支持Cookie,會將URL原封不動地輸出來。如果客戶端不支持Cookie,則會將用戶Session的id重寫到URL中。
注意:TOMCAT判斷客戶端瀏覽器是否支持Cookie的依據(jù)是請求中是否含有Cookie。盡管客戶端可能會支持Cookie,但是由于第一次請求時不會攜帶任何Cookie(因為并無任何Cookie可以攜帶),URL地址重寫后的地址中仍然會帶有jsessionid。當?shù)诙卧L問時服務(wù)器已經(jīng)在瀏覽器中寫入Cookie了,因此URL地址重寫后的地址中就不會帶有jsessionid了。
Servlet
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔相應(yīng)法律責任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔相應(yīng)法律責任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。