关于关闭浏览器Session就丢失的讨论
關閉瀏覽器Session真的會丟失嗎?
先讓我們來看下session機制。
session機制session機制是一種服務器端的機制,服務器使用一種類似于散列表的結構(也可能就是使用散列表)來保存信息。
當程序需要為某個客戶端的請求創建一個session的時候,服務器首先檢查這個客戶端的請求里是否已包含了一個session標識 - 稱為session id,如果已包含一個session id則說明以前已經為此客戶端創建過session,服務器就按照session id把這個session檢索出來使用(如果檢索不到,可能會新建一個),如果客戶端請求不包含session id,則為此客戶端創建一個session并且生成一個與此session相關聯的session id,session id的值應該是一個既不會重復,又不容易被找到規律以仿造的字符串,這個session id將被在本次響應中返回給客戶端保存。
從上面可以知道,在客戶端會保存一個Session id的值,既然能在客戶端保存Session值。這里就有一個問題,Session在客戶端是怎么保存的,保存在哪里?
===================================
以下關于cookie和關于session的內容摘自http://blog.csdn.net/wangzhkai/archive/2009/05/15/4187496.aspx
關于cookie
cookie怎么使用就不說了,cookie按照在客戶端存放的方式,可以分為兩類,
一種是會話性質的cookie,存放在瀏覽器內存中,當你在用代碼向客戶端寫入cookie的時候,如果沒有指定過期時間,那么cookie是存放在瀏覽器的內存里面的,不會持久化在硬盤上,也就是你在瀏覽器的臨時文件里找不到!
一種是持久化的cookie,存放在硬盤上,當你指定了cookie的過期時間,那么,在客戶端寫入cookie的時候就會在瀏覽器的臨時文件下生成一個文件,具體格式和名字可以到瀏覽器臨時文件去看下
cookie的原理是這樣的:當你在服務器端的代碼里寫了response.cookie["mycookie"]="mytestcookie"的時候,返回給客戶端的http響應中,會在http相應頭中加入cookie的信息,瀏覽器收到相應后,會按照http響應頭里的cookie在客戶端建立cookie。
客戶端的cookie也是插在http頭中發送到服務器端的,并且,一個域,在客戶端建立的所有cookie,在客戶端的每一次的http請求都會帶著,比如testwebsite.com這個站點,任何時刻寫到客戶端的cookie,只要不過期,瀏覽器在向testwebsite.com發送http請求的時候,會帶上這些cookie,所以cookie在客戶端的大小是有限制的
關于session
cookie明白了之后session就容易理解了,asp.net默認的session就是通過第一種cookie來實現的,你可以把自己的瀏覽器的cookie徹底禁用,然后再去登錄一些注冊過的門戶網站,會發現很多都登錄不了了。是cookie,將http的請求變得有狀態。session的實現是web服務器的事情,不過很顯然是利用會話cookie,也就是存放在瀏覽器內存里的那種cookie來實現的,在cookie里只是存放了SessionID,然后在服務器上建立了一張表,對應客戶端的SessionID。這張表是存放在服務器上的進程中的,也就是服務器的內存里,也就是Application里。當客戶端請求服務器的時候,如果服務器發現這是一個新的請求,就會分配給他一個SessionID,也就是在瀏覽器寫入一個sessionID的cookie。你可以試一下,在你請求過一次服務器之后,在服務器遍歷客戶端所有的cookie,就會發現這個叫做SessionID的cookie。
========以上部門來自CSDN博客,轉載請標明出處:http://blog.csdn.net/wangzhkai/archive/2009/05/15/4187496.aspx===========
根據上面的分析 也可以知道,所謂的關閉瀏覽器,Session就丟失是因為我們把Session保存在會話性質的cookie,也就是保存在瀏覽器的內存中,關閉瀏覽器時,因為瀏覽器的內存不存在了,所以session就丟失了。
如果我們能讓Session按cookie的第二種存放的方式來實現,那不就可以實現關閉瀏覽器的時候session不會丟失嗎。
session可以用URL路徑來保存,如下面所示:
一種是作為URL路徑的附加信息,表現形式為http://...../xxx;jsessionid=ByOK3vjFD75aPnrF7C2HmdnV6QZcEbzWoWiBYEnLerjQ99zWpBng!-145788764
另一種是作為查詢字符串附加在URL后面,表現形式為http://...../xxx?jsessionid=ByOK3vjFD75aPnrF7C2HmdnV6QZcEbzWoWiBYEnLerjQ99zWpBng!-145788764
這兩種方式對于用戶來說是沒有區別的,只是服務器在解析的時候處理的方式不同,采用第一種方式也有利于把session id的信息和正常程序參數區分開來。
為了在整個交互過程中始終保持狀態,就必須在每個客戶端可能請求的路徑后面都包含這個session id。
歡迎大家參考有關Session與Cookie的討論。
.?
轉載于:https://www.cnblogs.com/chhuic/archive/2009/09/26/1574399.html
總結
以上是生活随笔為你收集整理的关于关闭浏览器Session就丢失的讨论的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 批处理优化XP
- 下一篇: 2017年html5行业报告,云适配发布