1. 程式人生 > >Java Session物件及其常用方法

Java Session物件及其常用方法

HTTP協議是一種無狀態協議。客戶向伺服器發出請求request,然後伺服器返回響應response,連線就被關閉了。在伺服器端不保留連線的有關資訊,因此當下一次連線時,伺服器端已沒有以前的連線資訊了,無法判斷這一次連線和以前的連線是否屬於同一個客戶。因此,必須使用會話記錄有關連線的資訊。
從客戶開啟瀏覽器連線到伺服器,到客戶關閉瀏覽器離開這個伺服器,稱做一個會話。當客戶訪問伺服器時,可能會反覆連線這個伺服器上的幾個頁面、反覆重新整理一個頁面或不斷地向一個頁面提交資訊等,伺服器應當通過某種方法知道這是同一個客戶,這時就需要session物件。session物件可以儲存使用者的登入資訊,實現購物車功能等。
在jsp頁面中可以直接使用session物件,也可以通過pageContext.getSession()或request.getSession()方法重新獲取session物件。

session的工作原理

伺服器建立session出來後,會把session的id號,以cookie的形式回寫給客戶機,這樣,只要客戶機的瀏覽器不關,再去訪問伺服器時,都會帶著session的id號去,伺服器發現客戶機瀏覽器帶session id過來了,就會使用記憶體中與之對應的session為之服務。直到客戶端瀏覽器關閉、超時或呼叫session的invalidate()方法使其失效,客戶端與伺服器的會話結束。

Session和Cookie的主要區別

  1. Cookie是把使用者的資料寫給使用者的瀏覽器。
  2. Session技術把使用者的資料寫到使用者獨佔的session中。
  3. Session物件由伺服器建立,開發人員可以呼叫request物件的。getSession方法得到session物件。

session物件主要用於屬性操作和會話管理

1.public void setAttribute(Sting name, Object value);//設定指定名字的屬性的值,並將它新增到session會話範圍內,如果該屬性在會話範圍內存在,則更改該屬性的值。
2.public Object getAttribute(String name);//在會話範圍內獲取指定名字的屬性的值,返回值型別為object,如果該屬性不存在,則返回null。
3.public void removeAttribute(String name);//刪除指定名字的session屬性,若該屬性不存在,則出現異常。
4.public void invalidate();//使session失效。可以立即使當前會話失效,原來會話中儲存的所有物件都不能再被訪問。
5.public String getId();//獲取當前的會話ID。每個會話在伺服器端都存在一個唯一的標示sessionID,session物件傳送到瀏覽器的唯一資料就是sessionID,它一般儲存在cookie中。
6.public void setMaxInactiveInterval(int interval);//設定會話的最大持續時間,單位是秒,負數表明會話永不失效。
7.public int getMaxInActiveInterval();//獲取會話的最大持續時間。
8.使用session物件的getCreationTime()和getLastAccessedTime()方法可以獲取會話建立的時間和最後訪問的時間,但其返回值是毫秒,一般需要使用下面的轉換來獲取具體日期和時間。
Date creationTime = new Date(session.getCreationTime());
Date accessedTime = new Date(session.getLastAccessedTime());
9.使用session.isNew()判斷session是不是新建立的

//使用request物件的getSession()獲取session,如果session不存在則建立一個
HttpSession session = request.getSession();
//獲取session的Id
String sessionId = session.getId();
//判斷session是不是新建立的
if (session.isNew()) {
    response.getWriter().print("session建立成功,session的id是:"+sessionId);
}else {
    response.getWriter().print("伺服器已經存在session,session的id是:"+sessionId);
}

session物件的銷燬時機

session物件預設30分鐘沒有使用,則伺服器會自動銷燬session,在web.xml檔案中可以手工配置session的失效時間,例如:

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" 
    xmlns="http://java.sun.com/xml/ns/javaee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
    http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
  <display-name></display-name>
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
  <!-- 設定Session的有效時間:以分鐘為單位-->
    <session-config>
        <session-timeout>15</session-timeout>
    </session-config>
</web-app>

當需要在程式中手動設定Session失效時,可以手工呼叫session.invalidate方法,摧毀session。

HttpSession session = request.getSession();
//手工呼叫session.invalidate方法,摧毀session
session.invalidate();