服務器端Session和客戶端Session


客戶端Session和服務器端Session

當用戶首次與web服務器建立連接的時候,服務器會給用戶分發一個SessionID作為標識。SessionID是一個由24個字符組成的隨機字符串。用戶每次提交頁面,瀏覽器都會把這個SesstionID包含在HTTP頭中提交給web服務器,這樣web服務器就能區分當前請求頁面是哪一個客戶端。這個SessionID就是保存在客戶端的,屬於客戶端Session。

其實客戶端Session默認是以cookie的形式來存儲的,所以當用戶禁用了cookie的話,服務器端就得不到SessionID。這時我們可以使用url的方式來存儲客戶端Session。也就是將SessionID直接寫在了url中,當然這種方法不常用。

sessionid如何產生?由誰產生?保存在哪里?

sessionid是一個會話的key,瀏覽器第一次訪問服務器會在服務器端生成一個session,有一個sessionid和它對應。tomcat生成的sessionid叫做jsessionid。 session在訪問tomcat服務器HttpServletRequest的getSession(true)的時候創建,tomcat的ManagerBase類提供創建sessionid的方法:隨機數+時間+jvmid; 它存儲在服務器的內存中,tomcat的StandardManager類將session存儲在內存中,也可以持久化到file,數據庫,memcache,Redis等。客戶端只保存sessionid到cookie中,而不會保存session,session銷毀只能通過invalidate或超時,關掉瀏覽器並不會關閉session。

session會因為瀏覽器的關閉而刪除嗎?

Cookie分為內存中Cookie(也可以說是進程中Cookie)和硬盤中Cookie。大部分的Session機制都使用進程中Cookie來保存Session id的,關閉瀏覽器后這個進程也就自動消失了,進程中的Cookie自然就消失了,那么Session id也跟着消失了,再次連接到服務器時也就無法找到原來的Session了。 當然,我們可以在登陸時點擊下次自動登錄,比如說CSDN的“記住我一周”,或者我們的購物車信息可以在切換不同瀏覽器時依然可用。這就要用到我們上文提到的另一種Cookie了——硬盤中Cookie,這時Session id將長期保存在硬盤上的Cookie中,直到失效為止。

詳細參考:《服務器端Session和客戶端Session》


免責聲明!

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



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