JavaWeb—會話管理—Session

Session會話簡介

會話是指在一段時間內,用戶使用同一個瀏覽器進程與Web應用之間的交互過程。
會話(Session)通常用來跟蹤用戶的狀態,緩存用戶在此瀏覽器進程中的信息。
當用戶關閉瀏覽器,上一個Session也就無法再次獲得瞭(Cookie的maxAge為-1的情況)。再次打開新的瀏覽器,將開始一個新的會話。
類javax.servlet.http.HttpSession。每一個HttpSession代表用戶的一個會話。
每一個Session的過期時間默認為30分鐘。

當瀏覽器第一次訪問服務器時,無論先訪問哪一個頁面,服務器就會給用戶分配一個唯一的會話標識,即jsessionid然後以cookie的形式返回給用戶。
下圖是一個響應頭(下圖是基於Servlet3.0的,在Servlet2.5中沒有HttpOnly屬性)

服務器給每個用戶創建一個會話,即HttpSession對象,保存在服務器端。
那麼,當用戶再次訪問服務器時,服務器是如何知道還是當前用戶呢?
當瀏覽器再次訪問服務器時,會攜帶包含瞭jsessionid的cookie訪問服務器。服務器根據此id返回此用戶的HttpSession對象,就保持瞭會話。

(那麼,是否可以在不同的瀏覽器上實現同一個同一個會話呢?
下面是一個典型的URL,它帶有一定的欺騙作用,可以在不同的瀏覽器上實現同一個會話:
https://localhost:8080/day07_2/CNCookieServlet;jsessionid=F8692D61CD46D094DBB7A8FC7387649C)

瀏覽器和服務器的關系如下兩圖:

HttpSession:

在Servlet中,通過HttpServletRequest.getSession方法獲取會話對像。
HttpSession接口的以下方法用於向會話范圍內共享數據:
getAttribute(“name”)
setAttribute(“name”,object);
getAttributeNames()
removeAttrubute(“name”)
Invalidate(); – 此方法強力刪除服務器緩存的session.
示例:
在一個Servlet的向httpSession中setAttribute設置某些值。
通過超連接,或其他方式轉到其他servlet並通過getAttribute顯示信息。
在任意Servlet中調用getAttribute顯示信息。
關閉此瀏覽器,重新訪問獲取信息的servlet,你會發現已經沒有信息瞭。

如下:

String name=request.getParameter("name");
request.setAttribute("name", "request---"+name);
request.getSession().setAttribute("name", "session---"+name);
getServletContext().setAttribute("name", "application---"+name);

Session的唯一標識Id:

每一個Session都一個唯一標識,即ID。
當瀏覽器獲取一個新的Session時,用戶即可以通過session.geId();打印出ID的值 。
在不關閉瀏覽器的情況下,在多個頁面上跳轉,使用的是同一個Session。

如:

request.getSession().getId()

何為安全退出:

用戶退出時,應該當將自己的信息從Session中清除-即安全退出。

安全退出是為瞭將自己在服務器上留下的信息清除幹凈,以防被黑
Session.invalidate();

1、request.getSession().invalidate();

如此可將session池中的相對應的對象刪除
2、Session.removeAttribute(…)

如:

request.getSession().removeAttribute("realCode");

用於刪除session對象中的屬性

通過重寫URL來跟蹤會話:

前面已經說過,Servlet容器先在客戶端保存一個SessionID,以後,在瀏覽器發出HTTP請求時,都會包含這個SessionID.Servlet容器讀取HTTP請求中的這個SessionID,根據這個SessionID從容器中取出HttpSession對像,以便於跟蹤HTTP請求屬於哪一個會話,這一過程稱為會話的跟蹤。

如果瀏覽器支持Cookie,Servlet容器就將SessionID作為Cookie保存在瀏覽器的客戶端。但如果出於安全的考慮,用戶禁用瞭Cookie,那麼Servlet容器又如何來跟蹤會話呢?

首先讓我們在IE中禁用Cookie(註意:對於某些GHOST的系統不起作用)。
IE>工具>Internet選項>隱私>高級,然後禁用Cookie。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *