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對象的來歷。web

相關文章
相關標籤/搜索