JavaWeb會話技術之Session

一 概述

當瀏覽器第一次給服務器發送請求時會建立一次會話,直到一方斷開爲止,一次會話一般包含多次請求和響應。主要作用時保證在這次會話的範圍內實現數據的共享。

實現的方式有:1.客戶端會話:Cookie;2. 服務端會話:Session;

二 會話之服務端會話——Session

session爲服務端會話技術,在一次會話的多次請求之間共享數據,將數據保存在服務器端的HttpSession對象中。

服務端會話的實現:

獲取HttpSession對象

public class SessionAccept extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        //1.獲取session
        HttpSession session = request.getSession();

        //2.存儲數據
        session.setAttribute("msg","hello session");
    }
}

使用HttpSession對象,主要是通過HttpSession對象使用以下方法:

    1. Object getAttribute(String name)  
            2. void setAttribute(String name, Object value)
            3. void removeAttribute(String name)  

Session的實現是依賴於cookie的,具體的實現如圖所示:

第一次請求的響應頭的set-cookie信息:

第二次請求的請求頭的cookie信息:

Session的細節問題:

1. 當我們的客戶端關閉後,服務器不關閉,兩次獲取的session在默認情況下不是同一個,如果要保證是同一個,我們可以創建Cookie,鍵爲JSESSIONID,設置最大存活時間,讓cookie持久化保存。

Cookie cookie = new Cookie("JSESSIONID",session.getId());
cookie.setMaxAge(60*60);
response.addCookie(cookie);

2. 當客戶端不關閉,服務器關閉後,兩次獲取的session是不同的,但是爲了確保數據不會丟失,tomcat會自動是實現session的鈍化(在服務器正常關閉之前,將session對象系列化到硬盤上,進行持久化保存)和session的活化(在服務器啓動後,將session文件轉化爲內存中的session對象)。

3. session的不同銷燬時間

 (1) 服務器關閉時

 (2)session對象調用invalidate()方法時。

 (3)tomcat中的session默認失效時間爲30分鐘,我們可以對其進行修改。

<session-config>
		<session-timeout>30</session-timeout>
</session-config>

Session的特點:

   1. session用於存儲一次會話的多次請求的數據,在服務器端保存,所以session中的數據比Cookie中數據的安全。

   2. session可以存儲任意類型,因爲sesssion使用的是setAttribute(String name, Object value)方法,值value的類型爲Object,任意大小的數據,但是Cookie的數據大小和數據類型是受到限制的。(Cookie默認爲String類型數據,因爲構造方法使用的是Cookie(String name, String value))。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章