深入理解HTTP Session

session在web開(kāi)發(fā)中是一個(gè)非常重要的概念枢泰,這個(gè)概念很抽象,很難定義铡溪,也是最讓人迷惑的一個(gè)名詞漂辐,也是最多被濫用的名字之一,在不同的場(chǎng)合棕硫,session一次的含義也很不相同髓涯。這里只探討HTTP Session。

為了說(shuō)明問(wèn)題饲帅,這里基于Java Servlet理解Session的概念與原理复凳,這里所說(shuō)Servlet已經(jīng)涵蓋了JSP技術(shù),因?yàn)镴SP最終也會(huì)被編譯為Servlet灶泵,兩者有著相同的本質(zhì)育八。

在Java中,HTTP的Session對(duì)象用javax.servlet.http.HttpSession來(lái)表示赦邻。

1髓棋、概念:Session代表服務(wù)器與瀏覽器的一次會(huì)話過(guò)程,這個(gè)過(guò)程是連續(xù)的,也可以時(shí)斷時(shí)續(xù)的按声。在Servlet中膳犹,session指的是HttpSession類的對(duì)象,這個(gè)概念到此結(jié)束了签则,也許會(huì)很模糊须床,但只有看完本文,才能真正有個(gè)深刻理解渐裂。

2豺旬、Session創(chuàng)建的時(shí)間是:
一個(gè)常見(jiàn)的誤解是以為session在有客戶端訪問(wèn)時(shí)就被創(chuàng)建,然而事實(shí)是直到某server端程序調(diào)用 HttpServletRequest.getSession(true)這樣的語(yǔ)句時(shí)才被創(chuàng)建柒凉,注意如果JSP沒(méi)有顯示的使用 <% @page session="false"%> 關(guān)閉session族阅,則JSP文件在編譯成Servlet時(shí)將會(huì)自動(dòng)加上這樣一條語(yǔ)句 HttpSession session = HttpServletRequest.getSession(true);這也是JSP中隱含的 session對(duì)象的來(lái)歷。
由于session會(huì)消耗內(nèi)存資源膝捞,因此坦刀,如果不打算使用session,應(yīng)該在所有的JSP中關(guān)閉它蔬咬。

引申:
1)鲤遥、訪問(wèn)*.html的靜態(tài)資源因?yàn)椴粫?huì)被編譯為Servlet,也就不涉及session的問(wèn)題计盒。
2)渴频、當(dāng)JSP頁(yè)面沒(méi)有顯式禁止session的時(shí)候,在打開(kāi)瀏覽器第一次請(qǐng)求該jsp的時(shí)候,服務(wù)器會(huì)自動(dòng)為其創(chuàng)建一個(gè)session膘盖,并賦予其一個(gè)sessionID托酸,發(fā)送給客戶端的瀏覽器。以后客戶端接著請(qǐng)求本應(yīng)用中其他資源的時(shí)候发笔,會(huì)自動(dòng)在請(qǐng)求頭上添加:
Cookie:JSESSIONID=客戶端第一次拿到的session ID
這樣,服務(wù)器端在接到請(qǐng)求時(shí)候,就會(huì)收到session ID懈涛,并根據(jù)ID在內(nèi)存中找到之前創(chuàng)建的session對(duì)象,提供給請(qǐng)求使用泳猬。這也是session使用的基本原理----搞不懂這個(gè)批钠,就永遠(yuǎn)不明白session的原理。
下面是兩次請(qǐng)求同一個(gè)jsp得封,請(qǐng)求頭信息:

image.png

通過(guò)圖可以清晰發(fā)現(xiàn)埋心,第二次請(qǐng)求的時(shí)候,已經(jīng)添加session ID的信息忙上。

3拷呆、Session刪除的時(shí)間是:
1)Session超時(shí):超時(shí)指的是連續(xù)一定時(shí)間服務(wù)器沒(méi)有收到該Session所對(duì)應(yīng)客戶端的請(qǐng)求,并且這個(gè)時(shí)間超過(guò)了服務(wù)器設(shè)置的Session超時(shí)的最大時(shí)間。
2)程序調(diào)用HttpSession.invalidate()
3)服務(wù)器關(guān)閉或服務(wù)停止

4茬斧、session存放在哪里:服務(wù)器端的內(nèi)存中腰懂。不過(guò)session可以通過(guò)特殊的方式做持久化管理。

5项秉、session的id是從哪里來(lái)的绣溜,sessionID是如何使用的:當(dāng)客戶端第一次請(qǐng)求session對(duì)象時(shí)候,服務(wù)器會(huì)為客戶端創(chuàng)建一個(gè)session娄蔼,并將通過(guò)特殊算法算出一個(gè)session的ID涮毫,用來(lái)標(biāo)識(shí)該session對(duì)象,當(dāng)瀏覽器下次(session繼續(xù)有效時(shí))請(qǐng)求別的資源的時(shí)候贷屎,瀏覽器會(huì)偷偷地將sessionID放置到請(qǐng)求頭中罢防,服務(wù)器接收到請(qǐng)求后就得到該請(qǐng)求的sessionID,服務(wù)器找到該id的session返還給請(qǐng)求者(Servlet)使用唉侄。一個(gè)會(huì)話只能有一個(gè)session對(duì)象咒吐,對(duì)session來(lái)說(shuō)是只認(rèn)id不認(rèn)人。

6属划、session會(huì)因?yàn)闉g覽器的關(guān)閉而刪除嗎恬叹?
不會(huì),session只會(huì)通過(guò)上面提到的方式去關(guān)閉同眯。

7绽昼、同一客戶端機(jī)器多次請(qǐng)求同一個(gè)資源,session一樣嗎须蜗?
一般來(lái)說(shuō)硅确,每次請(qǐng)求都會(huì)新創(chuàng)建一個(gè)session。

image.png

其實(shí)明肮,這個(gè)也不一定的菱农,總結(jié)下:對(duì)于多標(biāo)簽的瀏覽器(比如360瀏覽器)來(lái)說(shuō),在一個(gè)瀏覽器窗口中柿估,多個(gè)標(biāo)簽同時(shí)訪問(wèn)一個(gè)頁(yè)面循未,session是一個(gè)。對(duì)于多個(gè)瀏覽器窗口之間秫舌,同時(shí)或者相隔很短時(shí)間訪問(wèn)一個(gè)頁(yè)面的妖,session是多個(gè)的,和瀏覽器的進(jìn)程有關(guān)足陨。對(duì)于一個(gè)同一個(gè)瀏覽器窗口嫂粟,直接錄入url訪問(wèn)同一應(yīng)用的不同資源,session是一樣的钠右。

8赋元、session是一個(gè)容器,可以存放會(huì)話過(guò)程中的任何對(duì)象。

9搁凸、session因?yàn)檎?qǐng)求(request對(duì)象)而產(chǎn)生媚值,同一個(gè)會(huì)話中多個(gè)request共享了一session對(duì)象,可以直接從請(qǐng)求中獲取到session對(duì)象护糖。

10褥芒、其實(shí),session的創(chuàng)建和使用總在服務(wù)端嫡良,而瀏覽器從來(lái)都沒(méi)得到過(guò)session對(duì)象锰扶。但瀏覽器可以請(qǐng)求Servlet(jsp也是Servlet)來(lái)獲取session的信息∏奘埽客戶端瀏覽器真正緊緊拿到的是session ID坷牛,而這個(gè)對(duì)于瀏覽器操作的人來(lái)說(shuō),是不可見(jiàn)的很澄,并且用戶也無(wú)需關(guān)心自己處于哪個(gè)會(huì)話過(guò)程中京闰。
本文出自 “熔 巖” 博客,請(qǐng)務(wù)必保留此出處http://lavasoft.blog.51cto.com/62575/275589

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末甩苛,一起剝皮案震驚了整個(gè)濱河市蹂楣,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌讯蒲,老刑警劉巖痊土,帶你破解...
    沈念sama閱讀 217,509評(píng)論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異墨林,居然都是意外死亡赁酝,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,806評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門(mén)萌丈,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)赞哗,“玉大人,你說(shuō)我怎么就攤上這事辆雾。” “怎么了月劈?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,875評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵度迂,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我猜揪,道長(zhǎng)惭墓,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,441評(píng)論 1 293
  • 正文 為了忘掉前任而姐,我火速辦了婚禮腊凶,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己钧萍,他們只是感情好褐缠,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,488評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著风瘦,像睡著了一般队魏。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上万搔,一...
    開(kāi)封第一講書(shū)人閱讀 51,365評(píng)論 1 302
  • 那天胡桨,我揣著相機(jī)與錄音,去河邊找鬼瞬雹。 笑死昧谊,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的酗捌。 我是一名探鬼主播揽浙,決...
    沈念sama閱讀 40,190評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼意敛!你這毒婦竟也來(lái)了馅巷?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,062評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤草姻,失蹤者是張志新(化名)和其女友劉穎钓猬,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體撩独,經(jīng)...
    沈念sama閱讀 45,500評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡敞曹,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,706評(píng)論 3 335
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了综膀。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片澳迫。...
    茶點(diǎn)故事閱讀 39,834評(píng)論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖剧劝,靈堂內(nèi)的尸體忽然破棺而出橄登,到底是詐尸還是另有隱情,我是刑警寧澤讥此,帶...
    沈念sama閱讀 35,559評(píng)論 5 345
  • 正文 年R本政府宣布拢锹,位于F島的核電站,受9級(jí)特大地震影響萄喳,放射性物質(zhì)發(fā)生泄漏卒稳。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,167評(píng)論 3 328
  • 文/蒙蒙 一他巨、第九天 我趴在偏房一處隱蔽的房頂上張望充坑。 院中可真熱鬧减江,春花似錦、人聲如沸捻爷。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,779評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)役衡。三九已至茵休,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間手蝎,已是汗流浹背榕莺。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,912評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留棵介,地道東北人钉鸯。 一個(gè)月前我還...
    沈念sama閱讀 47,958評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像邮辽,于是被迫代替她去往敵國(guó)和親唠雕。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,779評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • session在web開(kāi)發(fā)中是一個(gè)非常重要的概念吨述,這個(gè)概念很抽象岩睁,很難定義,也是最讓人迷惑的一個(gè)名詞揣云,也是最多被濫...
    曹波波閱讀 513評(píng)論 0 0
  • 轉(zhuǎn)自 :http://blog.csdn.net/taoff/articles/1921009.aspx 一捕儒、術(shù)語(yǔ)...
    stone_yao閱讀 6,180評(píng)論 0 31
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語(yǔ)法,類相關(guān)的語(yǔ)法邓夕,內(nèi)部類的語(yǔ)法刘莹,繼承相關(guān)的語(yǔ)法,異常的語(yǔ)法焚刚,線程的語(yǔ)...
    子非魚(yú)_t_閱讀 31,631評(píng)論 18 399
  • 從三月份找實(shí)習(xí)到現(xiàn)在点弯,面了一些公司,掛了不少矿咕,但最終還是拿到小米抢肛、百度、阿里痴腌、京東雌团、新浪、CVTE士聪、樂(lè)視家的研發(fā)崗...
    時(shí)芥藍(lán)閱讀 42,246評(píng)論 11 349
  • mTotalLength = 0;int maxWidth = 0;int childState = 0;int ...
    None_Ling閱讀 643評(píng)論 0 0