JavaWeb學習總結第六篇--認識Session機制


認識Session機制

前文也提到過,常用的會話跟蹤有兩種技術:CookieSession。今天就為大家講解一下Session機制。

什么是Session?

Session是另一種記錄客戶狀態的機制,不同的是Cookie保存在客戶端瀏覽器中,而Session保存在服務器上。客戶端瀏覽器訪問服務器的時候,服務器把客戶端信息以某種形式記錄在服務器上,這就是Session。客戶端瀏覽器再次訪問時只需要從該Session中查找該客戶的狀態就可以了。

實現用戶登錄

Session對應的類為javax.servlet.http.HttpSession類。每個來訪者對應一個Session對象,所有該客戶的狀態信息都保存在這個Session對象里。Session對象是在客戶端第一次請求服務器的時候創建的。Session也是一個key-value屬性對,通過getAttribute(String key)和setAttribute(String key,Object value)方法讀寫客戶狀態信息。

Session的生命周期

Session保存在服務器端,為了獲得更高的存取速度,服務器一般把Session保存在內存里。需要注意的是只有訪問jsp、Servlet等程序時才會創建Session,訪問HTML、IMAGE等靜態資源時並不會創建Session。Session生成后,只要用戶繼續訪問,服務器就會更新Session的最后訪問時間,並維護該Session。

由於會有越來越多的用戶訪問服務器,因此Session也會越來越多。為防止內存溢出,服務器會把長時間沒有活躍的用戶的Session從內存里刪除。這個時間就是Session的超時時間。如果超過了超時時間沒訪問服務器,Session就自動失效了。

Session的超時時間為maxInactiveInterval屬性,可以通過對應的getMaxInactiveInterval()獲取,通過setMaxInactiveInterval(long interval)修改。

Session的常用方法

URL地址重寫

雖然Session保存在服務器里,對客戶端是透明的,但是Session的正常運行也需要客戶端瀏覽器的支持。這是因為Session需要使用Cookie作為識別標志。HTTP協議是無狀態的,Session不能依據HTTP連接來判斷是否為同一用戶,因此服務器向客戶端瀏覽器發送一個名為JSESSIONID的Cookie,它的值為該Session的ID(也就是HttpSession.getId()的返回值)。Session依據該Cookie來識別是否為同一用戶。

如果客戶端瀏覽器將Cookie功能禁用,或者不支持Cookie怎么辦呢?比如很多手機就沒有支持Cookie的功能。Java Web提供了一種解決方案:URL地址重寫。

URL地址重寫的原理是將該用戶Session的id信息重寫到URL地址中。服務器能夠解析重寫后的URL獲取Session的id。這樣即使客戶端不支持Cookie,也可以使用Session來記錄用戶狀態。HttpServletResponse類提供了encodeURL(String url)實現URL地址重寫。


免責聲明!

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



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