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