一.概念
- Session是一個接口(HttpSession)
- Session是會話. 它是用來維護一個客戶端和服務器之間關聯的一種技術.
- 每個客戶端都有自己的一個Session會話
- Session會話中, 我們經常用來保存用戶登陸之後的信息.
二.Session應用
2.1 Session創建
// 第一次則Session則新創建, 否則獲取Session對象
HttpSession session = req.getSession();
// 判斷當前Session會話, 是否是新創建的
boolean isNew = session.isNew();
// 獲取Session會話的唯一標識 id
String id = session.getId();
2.2 Session域
// 往Session域對象中存值
req.getSession().setAttribute("key", "value");
// 獲取Session
Object attribute = req.getSession().getAttribute("sessin");
// 將獲取的Session值返回給客戶端
resp.getWrite().write("從Session中獲取的session數據是:" + attribute);
// 將輸出 '從Session中獲取的session數據是:value'
2.3 Session生命週期
public void setMaxInactiveInterval(int interval)
指定在 servlet 容器使此會話失效之前客戶端請求之間的時間間隔,以秒爲單位。負數時間指示會話永遠不會超時。
該方法是給指定頁面設置sesssion的超時間隔時長
public void invalidate()
使此會話無效,然後取消對任何綁定到它的對象的綁定。
public int getMaxInactiveInterval()
返回 servlet 容器在客戶端訪問之間將使此會話保持打開狀態的最大時間間隔,以秒爲單位。在此間隔之後,servlet 容器將使會話無效。可使用
setMaxInactiveInterval
方法設置最大時間間隔。負數時間指示會話永遠不會超時。Session默認的超時時長是30分鐘
如果修改默認值的話, 在web工程中修改
web.xml
文件,<session-config> <session-timeout>20</session-timeout> </session-config>
! 注意 ! : session的超時指的是: 客戶端兩次請求的最大間隔時長
如果期間再次發送請求, 則會重新計算間隔時長.
瀏覽器和Session的關聯
Session的創建基於Cookie, 保存在Cookie的 JSESSION 中, 如果瀏覽器關閉, 雖然session沒有超時, 但是cookie已經自動銷燬, 所以重新打開需要重新創建Seesion