會話
容器幾乎會做cookie的所有工作,如
在響應中發送一個會話cookie(從請求中得到會話ID)
HttpSession session = request.getSession();
在服務器中請求一個會話,餘下的事情會自動完成
- 建立新的HttpSession對象
- 生成唯一的會話ID
- 建立新的Cookie對象
- 把會話ID與cookie關聯
- 在響應中設置Cookie(在Set-Cookie首部下)
Session.isNew()
用戶還沒用這個會話ID做過響應isNew就返回true
如果沒有啓用cookie,客戶不會加入會話,isNew()方法總是會返回true
response.sendRedirect(response.encodeURL(url));
如果只想要一個已經有的會話
HttpSession session =request.getSession(false); //如果沒有與此客戶關聯的會話,返回null
If(session == null){
// do something
}
關鍵的HttpSession方法
- getCreationTime():返回第一次創建會話的時間
- getLastAccessedTime():返回容器最後一次得到包含這個會話ID的請求後過了多長時間(毫秒)
- setMaxInactiveInterval():指定對於這個會話客戶請求的最大間隔時間(秒)
- getMaxInactiveInterval():返回對於這個會話客戶請求的最大間隔時間(秒)
- invalidate():結束會話。當前存儲在這個會話中的所有屬性也會接觸綁定
會話的三種死法
- 超時
- 在會話對象上調用invalidate()
- 在部署描述文件中配置會話超時
<session-config>
<session-timeout>15</session-timeout> <!-- 15分鐘 -->
</session-config>
設置特定會話的會話超時
Session.setMaxInactiveInterval(15*60); //15分鐘
Cookie在瀏覽器關閉後仍能存活
Cookie cookie = new Cookie(“username”,name);
Cookie.setMaxAge(30*60); //單位秒,設置在客戶端存活多久
Response.addCookie(cookie) //將cookie發送到客戶
URL重寫
jsp中
Cookie cookie = new Cookie(“username”,name);
Cookie.setMaxAge(30*60); //單位秒,設置在客戶端存活多久
Response.addCookie(cookie) //將cookie發送到客戶
servlet中
Stringpath = request.getContextPath();
response.sendRedirect(response.encodeURL(path+"/MyJsp.jsp"));