2-深入理解HTTP Session

session在web開發(fā)中是一個(gè)非常重要的概念然眼,這個(gè)概念很抽象,很難定義顶籽,也是最讓人迷惑的一個(gè)名詞玩般,也是最多被濫用的名字之一,在不同的場合礼饱,session一次的含義也很不相同坏为。這里只探討HTTP Session究驴。

為了說明問題,這里基于Java Servlet理解Session的概念與原理匀伏,這里所說Servlet已經(jīng)涵蓋了JSP技術(shù)洒忧,因?yàn)镴SP最終也會被編譯為Servlet,兩者有著相同的本質(zhì)帘撰。

在Java中跑慕,HTTP的Session對象用javax.servlet.http.HttpSession來表示万皿。

1摧找、概念:Session代表服務(wù)器與瀏覽器的一次會話過程,這個(gè)過程是連續(xù)的牢硅,也可以時(shí)斷時(shí)續(xù)的蹬耘。在Servlet中,session指的是HttpSession類的對象减余,這個(gè)概念到此結(jié)束了综苔,也許會很模糊,但只有看完本文位岔,才能真正有個(gè)深刻理解如筛。

2、Session創(chuàng)建的時(shí)間是:

一個(gè)常見的誤解是以為session在有客戶端訪問時(shí)就被創(chuàng)建抒抬,然而事實(shí)是直到某server端程序調(diào)用 HttpServletRequest.getSession(true)這樣的語句時(shí)才被創(chuàng)建杨刨,注意如果JSP沒有顯示的使用 <% @page session="false"%> 關(guān)閉session,則JSP文件在編譯成Servlet時(shí)將會自動加上這樣一條語句 HttpSession session = HttpServletRequest.getSession(true);這也是JSP中隱含的 session對象的來歷擦剑。

由于session會消耗內(nèi)存資源妖胀,因此,如果不打算使用session惠勒,應(yīng)該在所有的JSP中關(guān)閉它赚抡。

引申:

1)、訪問*.html的靜態(tài)資源因?yàn)椴粫痪幾g為Servlet纠屋,也就不涉及session的問題涂臣。

2)、當(dāng)JSP頁面沒有顯式禁止session的時(shí)候售担,在打開瀏覽器第一次請求該jsp的時(shí)候肉康,服務(wù)器會自動為其創(chuàng)建一個(gè)session,并賦予其一個(gè)sessionID灼舍,發(fā)送給客戶端的瀏覽器吼和。以后客戶端接著請求本應(yīng)用中其他資源的時(shí)候,會自動在請求頭上添加:

Cookie:JSESSIONID=客戶端第一次拿到的session ID

這樣骑素,服務(wù)器端在接到請求時(shí)候炫乓,就會收到session ID刚夺,并根據(jù)ID在內(nèi)存中找到之前創(chuàng)建的session對象,提供給請求使用末捣。這也是session使用的基本原理----搞不懂這個(gè)侠姑,就永遠(yuǎn)不明白session的原理。

下面是兩次請求同一個(gè)jsp箩做,請求頭信息:

圖片.png

通過圖可以清晰發(fā)現(xiàn)莽红,第二次請求的時(shí)候,已經(jīng)添加session ID的信息邦邦。

3安吁、Session刪除的時(shí)間是:

1)Session超時(shí):超時(shí)指的是連續(xù)一定時(shí)間服務(wù)器沒有收到該Session所對應(yīng)客戶端的請求,并且這個(gè)時(shí)間超過了服務(wù)器設(shè)置的Session超時(shí)的最大時(shí)間燃辖。

2)程序調(diào)用HttpSession.invalidate()

3)服務(wù)器關(guān)閉或服務(wù)停止

4鬼店、session存放在哪里:服務(wù)器端的內(nèi)存中。不過session可以通過特殊的方式做持久化管理黔龟。

5妇智、session的id是從哪里來的,sessionID是如何使用的:當(dāng)客戶端第一次請求session對象時(shí)候氏身,服務(wù)器會為客戶端創(chuàng)建一個(gè)session巍棱,并將通過特殊算法算出一個(gè)session的ID,用來標(biāo)識該session對象蛋欣,當(dāng)瀏覽器下次(session繼續(xù)有效時(shí))請求別的資源的時(shí)候航徙,瀏覽器會偷偷地將sessionID放置到請求頭中,服務(wù)器接收到請求后就得到該請求的sessionID豁状,服務(wù)器找到該id的session返還給請求者(Servlet)使用捉偏。一個(gè)會話只能有一個(gè)session對象,對session來說是只認(rèn)id不認(rèn)人泻红。

6夭禽、session會因?yàn)闉g覽器的關(guān)閉而刪除嗎?

不會谊路,session只會通過上面提到的方式去關(guān)閉讹躯。

7、同一客戶端機(jī)器多次請求同一個(gè)資源缠劝,session一樣嗎潮梯?

一般來說,每次請求都會新創(chuàng)建一個(gè)session惨恭。

其實(shí)秉馏,這個(gè)也不一定的,總結(jié)下:對于多標(biāo)簽的瀏覽器(比如360瀏覽器)來說脱羡,在一個(gè)瀏覽器窗口中萝究,多個(gè)標(biāo)簽同時(shí)訪問一個(gè)頁面免都,session是一個(gè)。對于多個(gè)瀏覽器窗口之間帆竹,同時(shí)或者相隔很短時(shí)間訪問一個(gè)頁面绕娘,session是多個(gè)的,和瀏覽器的進(jìn)程有關(guān)栽连。對于一個(gè)同一個(gè)瀏覽器窗口险领,直接錄入url訪問同一應(yīng)用的不同資源,session是一樣的秒紧。

8绢陌、session是一個(gè)容器,可以存放會話過程中的任何對象噩茄。

9下面、session因?yàn)檎埱螅╮equest對象)而產(chǎn)生复颈,同一個(gè)會話中多個(gè)request共享了一session對象绩聘,可以直接從請求中獲取到session對象。

10耗啦、其實(shí)凿菩,session的創(chuàng)建和使用總在服務(wù)端,而瀏覽器從來都沒得到過session對象帜讲。但瀏覽器可以請求Servlet(jsp也是Servlet)來獲取session的信息衅谷。客戶端瀏覽器真正緊緊拿到的是session ID似将,而這個(gè)對于瀏覽器操作的人來說获黔,是不可見的,并且用戶也無需關(guān)心自己處于哪個(gè)會話過程中在验。

本文出自 “熔 巖” 博客玷氏,請務(wù)必保留此出處http://lavasoft.blog.51cto.com/62575/275589

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市腋舌,隨后出現(xiàn)的幾起案子盏触,更是在濱河造成了極大的恐慌,老刑警劉巖块饺,帶你破解...
    沈念sama閱讀 211,290評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件赞辩,死亡現(xiàn)場離奇詭異,居然都是意外死亡授艰,警方通過查閱死者的電腦和手機(jī)辨嗽,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評論 2 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來淮腾,“玉大人糟需,你說我怎么就攤上這事岛心。” “怎么了篮灼?”我有些...
    開封第一講書人閱讀 156,872評論 0 347
  • 文/不壞的土叔 我叫張陵忘古,是天一觀的道長。 經(jīng)常有香客問我诅诱,道長髓堪,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,415評論 1 283
  • 正文 為了忘掉前任娘荡,我火速辦了婚禮干旁,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘炮沐。我一直安慰自己争群,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,453評論 6 385
  • 文/花漫 我一把揭開白布大年。 她就那樣靜靜地躺著换薄,像睡著了一般。 火紅的嫁衣襯著肌膚如雪翔试。 梳的紋絲不亂的頭發(fā)上轻要,一...
    開封第一講書人閱讀 49,784評論 1 290
  • 那天,我揣著相機(jī)與錄音垦缅,去河邊找鬼冲泥。 笑死,一個(gè)胖子當(dāng)著我的面吹牛壁涎,可吹牛的內(nèi)容都是我干的凡恍。 我是一名探鬼主播,決...
    沈念sama閱讀 38,927評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼怔球,長吁一口氣:“原來是場噩夢啊……” “哼嚼酝!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起庞溜,我...
    開封第一講書人閱讀 37,691評論 0 266
  • 序言:老撾萬榮一對情侶失蹤革半,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后流码,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體又官,經(jīng)...
    沈念sama閱讀 44,137評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,472評論 2 326
  • 正文 我和宋清朗相戀三年漫试,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了六敬。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,622評論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡驾荣,死狀恐怖外构,靈堂內(nèi)的尸體忽然破棺而出普泡,到底是詐尸還是另有隱情,我是刑警寧澤审编,帶...
    沈念sama閱讀 34,289評論 4 329
  • 正文 年R本政府宣布撼班,位于F島的核電站,受9級特大地震影響垒酬,放射性物質(zhì)發(fā)生泄漏砰嘁。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,887評論 3 312
  • 文/蒙蒙 一勘究、第九天 我趴在偏房一處隱蔽的房頂上張望矮湘。 院中可真熱鬧,春花似錦口糕、人聲如沸缅阳。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽十办。三九已至,卻和暖如春伏伯,著一層夾襖步出監(jiān)牢的瞬間橘洞,已是汗流浹背捌袜。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工说搅, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人虏等。 一個(gè)月前我還...
    沈念sama閱讀 46,316評論 2 360
  • 正文 我出身青樓弄唧,卻偏偏與公主長得像,于是被迫代替她去往敵國和親霍衫。 傳聞我的和親對象是個(gè)殘疾皇子候引,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,490評論 2 348

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

  • session在web開發(fā)中是一個(gè)非常重要的概念,這個(gè)概念很抽象敦跌,很難定義澄干,也是最讓人迷惑的一個(gè)名詞,也是最多被濫...
    沉默的金魚閱讀 422評論 0 1
  • session在web開發(fā)中是一個(gè)非常重要的概念柠傍,這個(gè)概念很抽象麸俘,很難定義,也是最讓人迷惑的一個(gè)名詞惧笛,也是最多被濫...
    曹波波閱讀 510評論 0 0
  • 目錄Cookie機(jī)制什么是CookieCookie的不可跨域名性Unicode編碼:保存中文BASE64編碼:保存...
    Tomatoro閱讀 16,931評論 7 186
  • 會話(Session)跟蹤是Web程序中常用的技術(shù)从媚,用來跟蹤用戶的整個(gè)會話。常用的會話跟蹤技術(shù)是Cookie與Se...
    chinariver閱讀 5,601評論 1 49
  • 2018 6.25 星期一 天氣陰 今天陰沉沉的悶熱患整!送下孩子去上班拜效,中午還好沒接晚喷众,到...
    往事隨風(fēng)_452e閱讀 160評論 0 0