標籤:style java ext c http get
HTTP 是一種無狀態協議,這意味著每次用戶端檢索網頁時,都要單獨開啟一個伺服器串連,因此伺服器不會記錄下先前用戶端請求的任何資訊。它與FTP、Telnet等協議不同,FTP等協議可以記住使用者的串連資訊。
會話(Session)是指一個終端使用者與互動系統進行通訊的時間間隔,通常指從登陸系統到登出系統之間所經過的時間以及如果需要的話,可能還有一定操作空間。JSP有四種方式實現會話跟蹤功能。
- Cookie
伺服器在響應請求時可以將一些資料以"鍵-值"對的形式通過響應資訊儲存在用戶端。當瀏覽器再次訪問相同的應用時,會將原先的存有session ID的Cookie通過請求資訊帶到伺服器端,網路伺服器通過識別唯一的session ID來代表每個用戶端,從而識別這個用戶端接下來的請求。
用於會話跟蹤的Cookie叫做會話Cookie。Servlet規範中會話跟蹤的cookie名字必須是JSESSIONID,儲存在瀏覽器的記憶體中。
Cookie可以用於保持使用者的工作階段狀態,但Cookie資訊儲存在用戶端,存在較大的安全隱患,且一般瀏覽器對Cookie的數目及資料大小有嚴格的限制。在Web應用中,一般情況下通過HttpSession對象保持工作階段狀態
- Session
Session技術則是服務端的解決方案,它是通過伺服器來保持狀態的。在Java中是通過調用HttpServletRequest的getSession方法(使用true作為參數)建立的。在建立了Session的同時,伺服器會為該Session產生唯一的Session id,而這個Session id在隨後的請求中會被用來重新獲得已經建立的Session;在Session被建立之後,就可以調用Session相關的方法往Session中增加內容了,而這些內容只會儲存在伺服器中,發到用戶端的只有Session id;當用戶端再次發送請求的時候,會將這個Session id帶上,伺服器接受到請求之後就會依據Session id找到相應的Session,從而再次使用之。正式這樣一個過程,使用者的狀態也就得以保持了。
- 隱藏表單域
隱藏表單域是將會話ID添加到HTML的隱藏表單中(類型為hidden的input)。重新導向和轉寄
- 重寫URL
把會話ID編碼在URL中。 例:counter.jjsp;jsessionnid=be8d697876787876befdbde898789098980這樣,即使瀏覽器不支援cookie,也能夠實現會話跟蹤。
對於URL複寫,伺服器從請求的URI中提取出會話ID,並把該請求與相應的會話關聯起來,然後在訪問會話資料的時候,JSP頁面所進行的處理方式就和使用cookie跟蹤會話id時所使用的方式完全相同。所以sesssion的實現要依靠cookie或URL複寫技術。