session的作用范圍(轉)


session是在服務器端建立的,瀏覽器訪問服務器會有一個jsessionid,瀏覽器端通過 jsessionid定位服務器端的session,session的創建和銷毀由服務器端控制。當瀏覽器關閉后,session還存在在服務器端,只不 過你新開的瀏覽器去訪問服務器會創建另一個session,這個時候的jsessionid已經不一樣了。也就不能訪問上一次的哪個session里面的 內容了。
那服務器端session如何建的呢? 普通htm不會創建,jsp默認是創建的,只要你訪問一個任何一個jsp就會創建(不過只創建一次),你關閉瀏覽器從新訪問又會創建一個,這些創建的 session由服務器自己控制銷毀,你也可以在服務器端代碼中銷毀。
session其實簡單:
先request.getsession(),當已有一個session與前request相關時就返回對這個session的引用,當沒有時就生成一 個.一個session在server通過一個sessionid來標識的。也就是說在一個server是不會有兩個相同sessionid的 session.
那么session為什么會和cookie扯在一起呢?
正如我所說對於一個session來說它的sessionid就是其身份的標識。若我們將這個sessionid保存到用戶端,當同一個會話的后序請求來 時都將這個sessionid放在request 的header中(也就是我們說的cookie)這樣不就可以來驗證這個request是否與之前的request是同一個會話了嗎!
什么是會話呢?
我們可以通俗一點理解。只要你的browers不關我們就稱這一系列的request與response為一個會話。一斷你close就稱這個會話已結 束。雖然會話結束但並不代表你的session就被destroy.因為session是存活在server上的。它的生命完全由server來主宰 (web.xml中的設定).
雖然你的session還存活在server上但你已無法再取得它。因為j2ee的api只給我們一種方法來取得與當前會話相關的session的引 用:request.getsession() or reqeust.getsession(boolean)
這也就是為會什么會有"當瀏覽器關session就結束"這個錯誤的說法了!
深刻理解一下,  
一個常見的誤解是以為session在有客戶端訪問時就被創建,然而事實是直到某server端程序調用 HttpServletRequest.getSession(true)這樣的語句時才被創建,
注意如果JSP沒有顯示的使用 <%@page session="false"%> 關閉session,
則JSP文件在編譯成Servlet時將會自動加上這樣一條語句HttpSession session = HttpServletRequest.getSession(true);
這也是JSP中隱含的session對象的來歷。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM