深入理解JSP/Servlet Session會話管理機制

來源:互聯網
上載者:User

標籤:style   java   ext   c   http   get   

HTTP 是一種無狀態協議,這意味著每次用戶端檢索網頁時,都要單獨開啟一個伺服器串連,因此伺服器不會記錄下先前用戶端請求的任何資訊。它與FTP、Telnet等協議不同,FTP等協議可以記住使用者的串連資訊。

會話(Session)是指一個終端使用者與互動系統進行通訊的時間間隔,通常指從登陸系統到登出系統之間所經過的時間以及如果需要的話,可能還有一定操作空間。JSP有四種方式實現會話跟蹤功能。

  1. Cookie

伺服器在響應請求時可以將一些資料以"鍵-值"對的形式通過響應資訊儲存在用戶端。當瀏覽器再次訪問相同的應用時,會將原先的存有session ID的Cookie通過請求資訊帶到伺服器端,網路伺服器通過識別唯一的session ID來代表每個用戶端,從而識別這個用戶端接下來的請求。

用於會話跟蹤的Cookie叫做會話Cookie。Servlet規範中會話跟蹤的cookie名字必須是JSESSIONID,儲存在瀏覽器的記憶體中。

Cookie可以用於保持使用者的工作階段狀態,但Cookie資訊儲存在用戶端,存在較大的安全隱患,且一般瀏覽器對Cookie的數目及資料大小有嚴格的限制。在Web應用中,一般情況下通過HttpSession對象保持工作階段狀態

  1. Session

Session技術則是服務端的解決方案,它是通過伺服器來保持狀態的。在Java中是通過調用HttpServletRequest的getSession方法(使用true作為參數)建立的。在建立了Session的同時,伺服器會為該Session產生唯一的Session id,而這個Session id在隨後的請求中會被用來重新獲得已經建立的Session;在Session被建立之後,就可以調用Session相關的方法往Session中增加內容了,而這些內容只會儲存在伺服器中,發到用戶端的只有Session id;當用戶端再次發送請求的時候,會將這個Session id帶上,伺服器接受到請求之後就會依據Session id找到相應的Session,從而再次使用之。正式這樣一個過程,使用者的狀態也就得以保持了。

  1. 隱藏表單域

隱藏表單域是將會話ID添加到HTML的隱藏表單中(類型為hidden的input)。重新導向和轉寄

  1. 重寫URL

把會話ID編碼在URL中。 例:counter.jjsp;jsessionnid=be8d697876787876befdbde898789098980這樣,即使瀏覽器不支援cookie,也能夠實現會話跟蹤。

對於URL複寫,伺服器從請求的URI中提取出會話ID,並把該請求與相應的會話關聯起來,然後在訪問會話資料的時候,JSP頁面所進行的處理方式就和使用cookie跟蹤會話id時所使用的方式完全相同。所以sesssion的實現要依靠cookie或URL複寫技術。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.