Session


上篇提到的 Cookie 是客戶端的數據存儲技術

此篇的 Session 技術是依賴Cookie 技術的服務器端的數據存儲技術。

背景:

Request 對象解決了一次請求內的不同 Servlet 的數據共享問題,那么一個用戶的不同請求的處理需要使用相同的數據怎么辦呢

 

session原理:

用戶使用瀏覽器第一次向服務器發送請求,服務器在接受到請求后,調用對應的 Servlet 進行處理。在處理過程中會給用戶創建一個session 對象,用來存儲用戶請求處理相關的公共數據,並將此 session 對象的 JSESSIONID Cookie 的形式存儲在瀏覽器中 (臨時存儲,瀏覽器關閉即失效)。用戶在發起第二次請求及后續請求時,請求信息中會附帶JSESSIONID,服務器在接收到請求后, 調用對應的Servlet 進行請求處理,同時根據 JSESSIONID 返回其對應的session 對象。

 

特點:

由服務器進行創建

每個用戶獨立擁有一個session

默認存儲時間為 30 分鍾作用:

解決了一個用戶的不同請求的數據共享問題。

 

使用:

創建Session 對象

存儲數據到session 對象獲取session 對象

獲取數據從session 對象

如果獲取session 中不存在的數據返回null

 

注意:

只要不關閉瀏覽器,並且 session 不失效的情況下,同一個用戶的任意請求在項目的任意Servlet 中獲取到的都是同一個session 對象。

作用域: 一次會話

 

HttpSession 對象

 通過調用 HttpServletRequest 的公共方法 getSession() 來獲取 HttpSession 對象

HttpSession session = request.getSession();

方法 & 描述

public Object getAttribute(String name)

該方法返回在該 session 會話中具有指定名稱的對象,如果沒有指定名稱的對象,則返回 null

 

public Enumeration getAttributeNames()

該方法返回 String 對象的枚舉,String 對象包含所有綁定到該 session 會話的對象的名稱。


public long getCreationTime()

該方法返回該 session 會話被創建的時間,自格林尼治標准時間 1970 1 1 日午夜算起,以毫秒為單位。


public String getId()

該方法返回一個包含分配給該 session 會話的唯一標識符的字符串。


public long getLastAccessedTime()

該方法返回客戶端最后一次發送與該 session 會話相關的請求的時間自格林尼治標准時間 1970 1 1 日午夜算起,以毫秒為單位。


public int getMaxInactiveInterval()

該方法返回 Servlet 容器在客戶端訪問時保持 session 會話打開的最大時間間隔,以秒為單位。


public void invalidate()

該方法指示該 session 會話無效,並解除綁定到它上面的任何對象。


public boolean isNew()

如果客戶端還不知道該 session 會話,或者如果客戶選擇不參入該 session 會話,則該方法返回 true


public void removeAttribute(String name)

該方法將從該 session 會話移除指定名稱的對象。


public void setAttribute(String name, Object value)

該方法使用指定的名稱綁定一個對象到該 session 會話。


public void setMaxInactiveInterval(int interval)

該方法在 Servlet 容器指示該 session 會話無效之前,指定客戶端請求之間的時間,以秒為單位。

 

 

刪除 Session 會話數據

1、移除一個特定的屬性:您可以調用 public void removeAttribute(String name) 方法來刪除與特定的鍵相關聯的值。

2、刪除整個 session 會話:您可以調用 public void invalidate() 方法來丟棄整個 session 會話。

3、設置 session 會話過期時間:您可以調用 public void setMaxInactiveInterval(int interval) 方法來單獨設置 session 會話超時。

 

web.xml 配置

使用的是 Tomcat,除了上述方法,您還可以在 web.xml 文件中配置 session 會話超時

<session-config>
    <session-timeout>15</session-timeout>
  </session-config>

上面實例中的超時時間是以分鍾為單位,將覆蓋 Tomcat 中默認的 30 分鍾超時時間。

在一個 Servlet 中的 getMaxInactiveInterval() 方法會返回 session 會話的超時時間,以秒為單位。所以,如果在 web.xml 中配置 session 會話超時時間為 15 分鍾,那么 getMaxInactiveInterval() 會返回 900


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM