什么是 session?
- session 表示客戶端與服務器的一次會話。
- Web 中的 session 指的是用戶在瀏覽某個網(wǎng)站時,從進入瀏覽器到關閉所經(jīng)過的這段時間,也就是用戶瀏覽這個網(wǎng)站說話費的時間。
- 從上述定義中可以看到,session 實際上是一個特定的時間概念。
- session 保存在服務器的內(nèi)存中。
session 對象
- session 對象是一個 JSP 內(nèi)置對象
- session 對象在第一個 JSP 頁面被轉(zhuǎn)載時自動創(chuàng)建,完成會話期管理。
- 從一個客戶端打開瀏覽器并連接到服務器,到客戶端關閉瀏覽器離開這個服務器結束,被稱為一個會話。
- 當一個客戶訪問一個服務器時,可能在會在服務器的幾個頁面之間切換,服務器應當通過某種辦法知道這是一個客戶,就需要 session 對象。
- session 對象是 HttpSession 類的實例
session 對象的常用方法如下:
long getCreationTime() //返回 Session 創(chuàng)建時間
public String getId() //返回 session 創(chuàng)建是 JSP 引擎為它設的唯一 ID 號
public Object setAttribue(String name, Object value) //使用指定對象綁定到此會話
public Object getAttribute(String name) //返回與此會話中的指定名稱綁定在一起的對象,如果沒有對象綁定該名稱,則返回 null
String[] getValueNames() //返回一個包含此 Session 所有可用屬性的數(shù)組
int getmaxInactiveInterval() //返回兩次請求間隔多長時間此 session 被取消(單位 s)
session 生命周期
創(chuàng)建:
當客戶端第一次訪問某個 JSP 或者 Servlet 的時候,服務器會為當前會話創(chuàng)建一個 SessionId,每次客戶端向服務器發(fā)送請求時,都會將此 SessionId 攜帶過去,服務端會對此 SessionId 進行校驗。
活動:
- 某次會話當中通過此超鏈接打開的新頁面屬于同一個會話。
- 只要當前繪畫沒有全部關閉,重新打開新的瀏覽器窗口訪問同一項目資源時屬于同一會話。
- 除非本次會話的所有頁面都關閉后再重新訪問某個 JSP 或者 Servlet 將會床架新的會話。
note:
原有的會話都還存在,只是這個舊的 SessionId 仍然存在與服務端,只不過再也沒有客戶端會接待它然后交予服務端校驗。
銷毀:
Session 的銷毀只有三種方式:
- 調(diào)用了 session.invalidate() 方法
- Session 過期(超時)
- 服務器重新啟動
超時:
Tomcat 默認 session 超時時間為 30 分鐘
設置 session 超時有兩種方式:
- session.setMaxInactiveInterval(time): //單位 s
- 在 web.xml 配置
<session-config>
<session-timeout>
10
</session-timeout>
</session-config> //單位 min