四種會話跟蹤技術


會話跟蹤是一種靈活、輕便的機制,它使Web上的狀態編程變為可能。

HTTP是一種無狀態協議,每當用戶發出請求時,服務器就會做出響應,客戶端與服務器之間的聯系是離散的、非連續的。
當用戶在同一網站的多個頁面之間轉換時,根本無法確定是否是同一個客戶,會話跟蹤技術就可以解決這個問題。
當一個客戶在多個頁面間切換時,服務器會保存該用戶的信息。
有四種方法可以實現會話跟蹤技術:URL重寫、隱藏表單域、Cookie、Session。

1 . 隱藏表單域: <input type="hidden"> ,非常適合步需要大量數據存儲的會話應用。
2 .URL  重寫 :URL  可以在后面附加參數,和服務器的請求一起發送,這些參數為名字 / 值對。 http://blog.csdn.net/xh16319/article/details/8464055
3 .Cookie: 一個  Cookie  是一個小的,已命名數據元素。服務器使用  SET-Cookie  頭標將它作為  HTTP
響應的一部分傳送到客戶端,客戶端被請求保存  Cookie  值,在對同一服務器的后續請求使用一個
Cookie  頭標將之返回到服務器。與其它技術比較, Cookie  的一個優點是在瀏覽器會話結束后,甚至
在客戶端計算機重啟后它仍可以保留其值。 見: http://blog.csdn.net/xh16319/article/details/8464319
4 .Session :使用  setAttribute(String str,Object obj) 方法將對象捆綁到一個會話

 

 

實現URL重寫

URL重寫在客戶端瀏覽器不支持Cookie(下章介紹)的情況下使用的,它是客戶端瀏覽器請求服務器時,URL地址后面加上類似於 “SESSIONID=***”形式的參數,服務器端通過獲取SESSIONID關鍵字來獲取會話值。

在程序第一次訪問服務器端時,服務端並不能確認客戶端瀏覽器是否支持Cookie。因此,當服務器第一次發出請求時,服務端會默認采用URL重寫,也就是將SESSIONID寫到URL地址中傳遞。

核心代碼:String SessionId=request.getRequestedSessionId();

當客戶端發送請求后,服務器會根據提交給客戶端瀏覽器的信息自動檢查客戶端是否啟用了Cookie,如果啟用,將不再進行URL重寫。如果沒有,則繼續使用URL重寫。

通過response對象的encodeURL(String url)方法可以進行URL重寫。

public String encodeURL(String url);
對包含SessionID的URL進行編碼。如果不需要編碼,就直接返回這個URL。
Servlet引擎必須提供URL編碼方法,因為在有些情況下,我們將不得不重寫URL。
例如,在響應對應的請求中包含一個有效的Session,但是這個Session不能被非URL的(例如Cookie)的手段來維持。
所以所有提供給Servlet的URL都應通過這個方法運行,這樣才能確保會話跟蹤能夠在所有瀏覽器中正常運行。

隱藏域和URL重寫有着共同的優點:
它們在Cookie被禁用或者根本不支持的情況下依舊能夠工作。
缺點:
所有頁面必須是表單提交之后的結果,還有涉及許多冗長的處理工作。



免責聲明!

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



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