Java:Session詳解

來源:互聯網
上載者:User

書中講:
以下情況,Session結束生命週期,Servlet容器將Session所佔資源釋放:
1.用戶端關閉瀏覽器
2.Session到期
3.伺服器端調用了HttpSession的invalidate()方法。

"一個瀏覽器就是一個新session,關了瀏覽器session就結束了"
session 是在伺服器端建立的,瀏覽器訪問伺服器會有一個sessionid,瀏覽器端通過sessionid定位服務器端的session,session的建立和銷毀由伺服器端控制。當瀏覽器關閉後,session還存在在伺服器端,只不過你新開的瀏覽器去訪問伺服器會建立另一個session,這個時候的 sessionid已經不一樣了。也就不能訪問上一次的哪個session裡面的內容了。 

"session的建立和銷毀由伺服器端控制",伺服器端才有session,用戶端只是通過sessionid來匹配session.
那伺服器端session如何建的呢? 普通html不會建立,jsp預設是建立的,只要你訪問任何一個jsp就會建立(不過只建立一次),你關閉瀏覽器重新訪問又會建立一個,這些建立的session由伺服器自己控制銷毀,你也可以在伺服器端代碼中銷毀。

什麼情況下需要用上這種伺服器端的session方式?
預設情況下,jsp被訪問就會建立session(最開始是空的沒有資料的),你的應用中的代碼只是往session裡面put資料。網上說可以 通過 <%@ page session="false"%>來不讓jsp自動創session.我自己測試了一下(用sessionlistener),根本不起作用, session照樣建立成功。
最後說一下,只有伺服器端才有session.用戶端被存到本地的是cookie.不過安全性低。所以不能放重要的資料。

============================================================================

sesion其實簡單:
先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在有用戶端訪問時就被建立,然而事實是直到某server端程式調用HttpServletRequest.getSession(true)這樣的語句時才被建立,注意如果JSP沒有顯示的使用 <%@page session="false"%> 關閉session,則JSP檔案在編譯成Servlet時將會自動加上這樣一條語句HttpSession session = HttpServletRequest.getSession(true);

這也是JSP中隱含的session對象的來曆。

<**********************有點矛盾的地方,到底JSP顯示的使用< %@page session="false"%>能不能讓服務端不建立sessionid呢?實驗下**************************&gt;
<%@ page session="false"%>
不是不讓頁面建立Session,而是在此JSP頁面無法使用session.可以減少網路資料轉送.

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.