<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Aaronlong31

      BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
      12 Posts :: 3 Stories :: 17 Comments :: 0 Trackbacks


     
    session在web開發中是一個非常重要的概念,這個概念很抽象,很難定義,也是最讓人迷惑的一個名詞,也是最多被濫用的名字之一,在不同的場合,session一次的含義也很不相同。這里只探討HTTP Session。
     
    為了說明問題,這里基于Java Servlet理解Session的概念與原理,這里所說Servlet已經涵蓋了JSP技術,因為JSP最終也會被編譯為Servlet,兩者有著相同的本質。
     
    在Java中,HTTP的Session對象用javax.servlet.http.HttpSession來表示。
     
    1、概念:Session代表服務器與瀏覽器的一次會話過程,這個過程是連續的,也可以時斷時續的。在Servlet中,session指的是HttpSession類的對象,這個概念到此結束了,也許會很模糊,但只有看完本文,才能真正有個深刻理解。
     
    2、Session創建的時間是:
    一個常見的誤解是以為session在有客戶端訪問時就被創建,然而事實是直到某server端程序調用 HttpServletRequest.getSession(true)這樣的語句時才被創建,注意如果JSP沒有顯示的使用 <% @page session="false"%> 關閉session,則JSP文件在編譯成Servlet時將會自動加上這樣一條語句 HttpSession session = HttpServletRequest.getSession(true);這也是JSP中隱含的 session對象的來歷。
    由于session會消耗內存資源,因此,如果不打算使用session,應該在所有的JSP中關閉它。
     
    引申:
    1)、訪問*.html的靜態資源因為不會被編譯為Servlet,也就不涉及session的問題。
    2)、當JSP頁面沒有顯式禁止session的時候,在打開瀏覽器第一次請求該jsp的時候,服務器會自動為其創建一個session,并賦予其一個sessionID,發送給客戶端的瀏覽器。以后客戶端接著請求本應用中其他資源的時候,會自動在請求頭上添加:
    Cookie:JSESSIONID=客戶端第一次拿到的session ID這樣,服務器端在接到請求時候,就會收到session ID,并根據ID在內存中找到之前創建的session對象,提供給請求使用。這也是session使用的基本原理----搞不懂這個,就永遠不明白session的原理。
    下面是兩次請求同一個jsp,請求頭信息:

    通過圖可以清晰發現,第二次請求的時候,已經添加session ID的信息。
     
    3、Session刪除的時間是:
    1)Session超時:超時指的是連續一定時間服務器沒有收到該Session所對應客戶端的請求,并且這個時間超過了服務器設置的Session超時的最大時間。
    2)程序調用HttpSession.invalidate()
    3)服務器關閉或服務停止
     
    4、session存放在哪里:服務器端的內存中。不過session可以通過特殊的方式做持久化管理。
     
    5、session的id是從哪里來的,sessionID是如何使用的:當客戶端第一次請求session對象時候,服務器會為客戶端創建一個session,并將通過特殊算法算出一個session的ID,用來標識該session對象,當瀏覽器下次(session繼續有效時)請求別的資源的時候,瀏覽器會偷偷地將sessionID放置到請求頭中,服務器接收到請求后就得到該請求的sessionID,服務器找到該id的session返還給請求者(Servlet)使用。一個會話只能有一個session對象,對session來說是只認id不認人。
     
    6、session會因為瀏覽器的關閉而刪除嗎?
    不會,session只會通過上面提到的方式去關閉。
     
    7、同一客戶端機器多次請求同一個資源,session一樣嗎?
    一般來說,每次請求都會新創建一個session。

     
    其實,這個也不一定的,總結下:對于多標簽的瀏覽器(比如360瀏覽器)來說,在一個瀏覽器窗口中,多個標簽同時訪問一個頁面,session是一個。對于多個瀏覽器窗口之間,同時或者相隔很短時間訪問一個頁面,session是多個的,和瀏覽器的進程有關。對于一個同一個瀏覽器窗口,直接錄入url訪問同一應用的不同資源,session是一樣的。
     
    8、session是一個容器,可以存放會話過程中的任何對象。
     
    9、session因為請求(request對象)而產生,同一個會話中多個request共享了一session對象,可以直接從請求中獲取到session對象。
     
    10、其實,session的創建和使用總在服務端,而瀏覽器從來都沒得到過session對象。但瀏覽器可以請求Servlet(jsp也是Servlet)來獲取session的信息。客戶端瀏覽器真正緊緊拿到的是session ID,而這個對于瀏覽器操作的人來說,是不可見的,并且用戶也無需關心自己處于哪個會話過程中。
     
    本文出自 “熔 巖” 博客,請務必保留此出處http://lavasoft.blog.51cto.com/62575/275589

    posted on 2010-06-06 22:58 Aaronlong31 閱讀(165) 評論(0)  編輯  收藏

    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 亚洲人成网站999久久久综合| 亚洲国产精品lv| 亚洲成a人无码亚洲成www牛牛| 妻子5免费完整高清电视| 亚洲国产精品综合久久2007| 99热这里只有精品6免费| 久久国产亚洲高清观看| 88xx成人永久免费观看| 亚洲女人初试黑人巨高清| 5555在线播放免费播放| 亚洲精品国产电影午夜| 精品免费人成视频app | 日韩精品免费一级视频| 精品亚洲麻豆1区2区3区| 6080午夜一级毛片免费看6080夜福利| 亚洲av日韩av不卡在线观看| 99热这里有免费国产精品| 亚洲精品伊人久久久久| 免费视频中文字幕| www一区二区www免费| 亚洲Aⅴ无码专区在线观看q| 亚洲免费视频网址| 亚洲国产精品无码观看久久| 亚洲精品美女久久久久99小说| 久久久久久久国产免费看| 无码乱人伦一区二区亚洲| 黄页网站在线看免费| 日韩在线视精品在亚洲| 亚洲线精品一区二区三区影音先锋 | 国产人成免费视频| 2022免费国产精品福利在线| 无码乱人伦一区二区亚洲| 女人18毛片a级毛片免费视频| 人人公开免费超级碰碰碰视频| 久久久久久a亚洲欧洲aⅴ| 成年人网站免费视频| 黄色毛片视频免费| 亚洲另类激情综合偷自拍| 日韩在线天堂免费观看| 99久久婷婷免费国产综合精品| 亚洲啪啪免费视频|