激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語(yǔ)言|JavaScript|易語(yǔ)言|vb.net|

服務(wù)器之家 - 編程語(yǔ)言 - Java教程 - servlet之session工作原理簡(jiǎn)介_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

servlet之session工作原理簡(jiǎn)介_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

2020-12-07 11:10fjdingsd Java教程

這篇文章主要介紹了servlet之session工作原理簡(jiǎn)介,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧

要了解session的底層工作原理。我們還是先看在一個(gè)會(huì)話過程中,同一個(gè)瀏覽器在訪問多個(gè)web資源的情況好了,大致分為以下幾個(gè)步驟:

1,瀏覽器訪問某個(gè)servlet,這時(shí)如果服務(wù)器要從請(qǐng)求對(duì)象中獲取session對(duì)象(第一次獲取也是創(chuàng)建),那么服務(wù)器會(huì)為這個(gè)session對(duì)象創(chuàng)建一個(gè)id:jsessionid

2,同時(shí)在對(duì)瀏覽器的響應(yīng)過程中,這個(gè)session會(huì)將jsessionid這個(gè)id以cookie形式回送給客戶端瀏覽器,記住,這時(shí)候cookie服務(wù)器沒有設(shè)置有效時(shí)間,因此是存在瀏覽器的緩存中,而不是在硬盤文件。

3,當(dāng)用戶繼續(xù)在這個(gè)會(huì)話過程中訪問其他servlet,這時(shí)候這個(gè)servlet再?gòu)恼?qǐng)求對(duì)象中獲取session對(duì)象,注意這時(shí)候獲取session對(duì)象是從瀏覽器發(fā)來的請(qǐng)求中查詢是否有名為jsessionid的這個(gè)cookie,如果有,那么這個(gè)session就不用再創(chuàng)建,而是直接根據(jù)查詢服務(wù)器中這個(gè)相同jsessionid值的session,換句話說就可以取得之前存在這個(gè)session中的數(shù)據(jù)。

總結(jié)來說,session是基于cookie的。

(注:cookie并不是萬(wàn)能的,session首先是依據(jù)cookie,但是有時(shí)候cookie不能用,這時(shí)候session會(huì)查詢發(fā)來請(qǐng)求的url地址是否有jsessionid。)

session的隱藏cookie,我們可以做個(gè)小實(shí)驗(yàn)來驗(yàn)證下,在【myservlet】這個(gè)web工程下創(chuàng)建兩個(gè)servlet,分別命名為sessiondemo1和sessiondemo2:

在sessiondemo1代碼為:

?
1
2
3
httpsession session = request.getsession();
string data = "message from sessiondemo";
session.setattribute("data", data);

在sessiondemo2代碼為:

?
1
2
httpsession session = request.getsession();
system.out.println((string)session.getattribute("data"));

我們?cè)跒g覽器中打開httpwatch,來訪問sessiondemo1,因?yàn)槭鞘状卧L問servlet,查看sessiondemo1給瀏覽器的響應(yīng):

servlet之session工作原理簡(jiǎn)介_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

確確實(shí)實(shí)服務(wù)器發(fā)送回瀏覽器有這個(gè)jsessionid名稱的cookie,這時(shí)候如果我們?cè)僭诖蜷_的瀏覽器去訪問sessiondemo2,那么在httpwatch中觀察請(qǐng)求包的內(nèi)容發(fā)現(xiàn):

servlet之session工作原理簡(jiǎn)介_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

再次訪問服務(wù)器時(shí),瀏覽器就會(huì)帶著這個(gè)名為jsessionid的cookie給服務(wù)器,服務(wù)器正是通過這個(gè)cookie中的jsessionid值去服務(wù)器中查找之前為該瀏覽器創(chuàng)建的session。

如果我們將瀏覽器關(guān)閉,由于這個(gè)cookie沒有設(shè)置“setmaxage”,因此這個(gè)cookie只存在于瀏覽器的緩沖,瀏覽器關(guān)閉即被銷毀。如果想使關(guān)閉瀏覽器之后,session還能存在,我們就要人為的覆蓋這個(gè)session的cookie,并設(shè)置覆蓋cookie的有效時(shí)間和有效路徑。而這個(gè)cookie的值,也就是jsessionid的值,可以通過session的getid()方法得到。

1,覆蓋有效時(shí)間:

注意,服務(wù)器在為瀏覽器創(chuàng)建session后,在用戶沒有操作的情況下(或者瀏覽器關(guān)閉后)默認(rèn)為其維護(hù)30分鐘。這點(diǎn)可以從tomcat的【web.xml】文件中可以看出:

servlet之session工作原理簡(jiǎn)介_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

當(dāng)然我們從這里也可以修改服務(wù)器默認(rèn)的銷毀無操作的session時(shí)間。

當(dāng)然如果我們不要全局設(shè)置所有服務(wù)器中session的銷毀時(shí)間,就在每個(gè)web應(yīng)用中的web.xml文件中自定義添加<session-config>和<session-timeout>進(jìn)行設(shè)置。

注:我們還可以通過session對(duì)象的invalidate()方法,將某個(gè)session進(jìn)行立刻銷毀。

對(duì)此,如果我們要覆蓋一個(gè)session的cookie并保存在硬盤文件中,我們?cè)O(shè)置的cookie有效時(shí)間就不要超過服務(wù)器默認(rèn)的session-timeout時(shí)間。

2,覆蓋有效路徑:

如果我們創(chuàng)建一個(gè)cookie對(duì)象,沒有設(shè)置“setpath”,那么cookie的有效路徑為創(chuàng)建該cookie的程序(通常為某個(gè)servlet),即只有訪問了這個(gè)程序時(shí)瀏覽器才會(huì)帶著cookie過去,那實(shí)在是“人脈不通”,訪問這個(gè)web應(yīng)用的其他資源就無法再使用session了。

我們看看剛才的第一次訪問servlet時(shí),服務(wù)器為瀏覽器創(chuàng)建的session中的cookie的有效路徑:

servlet之session工作原理簡(jiǎn)介_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

可以看到這個(gè)服務(wù)器默認(rèn)將jsessionid這個(gè)cookie的有效路徑設(shè)置為創(chuàng)建這個(gè)session的web工程根目錄。所以我們要覆蓋session中的cookie時(shí)也應(yīng)該設(shè)置路徑為該web工程根目錄。

好,接下來對(duì)上面那個(gè)servlet的例子進(jìn)行改造,我們只需要在sessiondemo1中修改就行,因?yàn)檫@個(gè)首次將session的cookie返回給客戶端,修改后代碼如下:

?
1
2
3
4
5
6
7
8
httpsession session = request.getsession();
string data = "message from sessiondemo";
session.setattribute("data", data);
  
cookie cookie = new cookie("jsessionid", session.getid());
cookie.setmaxage(30*60);
cookie.setpath("/myservlet");
response.addcookie(cookie);

這樣,當(dāng)我們打開瀏覽器訪問了sessiondemo1之后,就能在存放cookie的目錄中找到該cookie,如果我們通過httpwatch來查看可以看到重名的這個(gè)cookie:

servlet之session工作原理簡(jiǎn)介_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

雖然jseesionid這個(gè)cookie重名了,沒有關(guān)系,因?yàn)槠渲刀际且粯拥?,并且如果我們將瀏覽器關(guān)閉后,沒有設(shè)置cookie有效時(shí)間的(也是原先session發(fā)來的)cookie將不復(fù)存在(存在瀏覽器緩存中,瀏覽器關(guān)閉就被銷毀),這時(shí)重新打開一個(gè)瀏覽器,再去訪問sessiondemo2依然能獲取到原來session中保存的內(nèi)容:

servlet之session工作原理簡(jiǎn)介_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

注意,這是另外打開瀏覽器窗口訪問的sessiondemo2!!另附:

servlet之session工作原理簡(jiǎn)介_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

通過這里我們可以看到,我們?nèi)藶榈貙⒃萻ession定義的cookie給替換了,而session并不知道,只要能獲得“jsessionid”這個(gè)cookie,它就認(rèn)為cookie是存在的,可以從這個(gè)cookie中id值獲取以前保存的信息,因此我們實(shí)現(xiàn)了一臺(tái)主機(jī)共享一個(gè)session,此時(shí),當(dāng)瀏覽器關(guān)閉,或者說結(jié)束一個(gè)會(huì)話后,依然能獲取session來獲取之前保存的數(shù)據(jù)。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 男人的天堂毛片 | 777zyz色资源站在线观看 | 美国黄色毛片女人性生活片 | 日本欧美一区二区三区在线观看 | 欧美日韩经典在线 | 日本一区二区三区精品 | 水卜樱一区二区av | 圆产精品久久久久久久久久久 | 国产91小视频在线观看 | 美国一级免费视频 | 久久电影一区二区 | 精品国产一区二区亚洲人成毛片 | www.69色| 一级大片一级一大片 | av免费在线播放网址 | 久久国产不卡 | 国产九色视频在线观看 | 56av国产精品久久久久久久 | 成人欧美日韩一区二区三区 | 日韩一级片一区二区三区 | 免费a视频在线观看 | 欧美黄色性生活视频 | 一级免费在线视频 | 午夜视频导航 | 羞羞的视频免费观看 | 永久av在线免费观看 | 91精品久久久久久久 | 一级裸体视频 | 一级电影免费 | 亚洲最大av网站 | 日夜操天天干 | 99精品视频在线观看免费播放 | 欧美一二区视频 | 久久3p视频 | 国产精品99久久久久久久vr | 国产在线精品一区二区三区不卡 | 欧美视频国产 | 99在线精品视频免费观看20 | 国产一区二区欧美 | 成人在线视频播放 | chinesexxxx刘婷hd|