王振國老師整理
Session
什麼是 Session 會話?
- Session 就一個接口(HttpSession)
- Session 就是會話。它是用來維護一個客戶端和服務器之間關聯的一種技術
- 每個客戶端都有自己的一個 Session 會話
- Session 會話中,我們經常用來保存用戶登錄之後的信息。
如何創建 Session 和獲取(id 號,是否爲新)
如何創建和獲取 Session。它們的 API 是一樣的。
request.getSession()
- 第一次調用是:創建 Session 會話
- 之後調用都是:獲取前面創建好的 Session 會話對象。
isNew(); 判斷到底是不是剛創建出來的(新的)
- true 表示剛創建
- false 表示獲取之前創建
每個會話都有一個身份證號。也就是 ID 值。而且這個 ID 是唯一的。
getId() 得到 Session 的會話 id 值。
Session 域數據的存取
/**
* 往 Session 中保存數據
* @param req
* @param resp
* @throws ServletException
* @throws IOException
*/
protected void setAttribute(HttpServletRequest req, HttpServletResponse resp) throws ServletException,IOException {
req.getSession().setAttribute("key1", "value1");
resp.getWriter().write("已經往 Session 中保存了數據");
}
/**
* 獲取 Session 域中的數據
* @param req
* @param resp
* @throws ServletException
* @throws IOException
*/
protected void getAttribute(HttpServletRequest req, HttpServletResponse resp) throws ServletException,IOException {
Object attribute = req.getSession().getAttribute("key1");
resp.getWriter().write("從 Session 中獲取出 key1 的數據是:" + attribute);
}
Session 生命週期控制
public void setMaxInactiveInterval(int interval) 設置 Session 的超時時間(以秒爲單位),超過指定的時長,Session 就會被銷燬。
- 值爲正數的時候,設定 Session 的超時時長。
- 負數表示永不超時(極少使用)
public int getMaxInactiveInterval()獲取 Session 的超時時間
public void invalidate() 讓當前 Session 會話馬上超時無效。
Session 默認的超時時長是多少?
Session 默認的超時時間長爲 30 分鐘。
因爲在 Tomcat 服務器的配置文件 web.xml中默認有以下的配置,它就表示配置了當前 Tomcat 服務器下所有的 Session 超時配置默認時長爲:30 分鐘。
<session-config>
<session-timeout>30</session-timeout>
</session-config>
如果說。你希望你的 web 工程,默認的 Session 的超時時長爲其他時長。你可以在你自己的 web.xml 配置文件中做 以上相同的配置。就可以修改你的 web 工程所有 Seession 的默認超時時長。
<!--表示當前 web 工程。創建出來 的所有 Session 默認是 20 分鐘 超時時長-->
<session-config>
<session-timeout>20</session-timeout>
</session-config>
如果你想只修改個別 Session 的超時時長。就可以使用上面的 API。setMaxInactiveInterval(int interval)來進行單獨的設 置。
- session.setMaxInactiveInterval(int interval)單獨設置超時時長。
Session 超時的概念介紹:
瀏覽器和 Session 之間關聯的技術內幕
Session 技術,底層其實是基於 Cookie 技術來實現的。