06. 會話管理

要點


在寫至響應的HTML中,URL重寫把會話ID增加到其中所有URL的最後。

會話ID作爲請求URL最後的“額外”信息再通過請求返回

如果客戶不接受cookie,URL重寫會自動發生,但是必須顯式地對所有URL編碼。

要對一個URL編碼,需要調用response. encodeURL(String)。

out.println("<a href='" + response.encodeURL("/BeerTest.do") + "'>click  me</a >") ;

沒有辦法對靜態頁面完成自動的URL 重寫,所以,如果你依賴於會話,就必須使用動態生成的頁面。

重定向   response.encodeRedirectURL("res.jsp");




設置會話超時
好消息: 你不用自己來跟蹤。看到上-- 頁的那些方法了嗎? 無需你使用這些方法來刪除無用的(不活動的) 會話。這些事情容器會爲你做的。
  會話有3種死法:
1、超時。
2、你在會話對象上調用invalidate( )。
3、應用絲束(崩潰或取消部署)


(1)在DD中配置會話超時
在DD中配置會話超時與在所創建的每一個會話上調HsetMaxInactiveInterval()有同樣的效果。
<session-config>
  <session-timeout>15</session-timeout>
</session-config>
15分鐘過期






(2)設置一個特定會話的會話超時

如果你想改變某個特定會話實例的session-timeout值(而不影響應用中其他會話的超時時間) : session.setMaxInactiveInterval(20 * 60);

不要把Cookie和首部混爲一談


向響應增加一個首部時,要把名和值String作爲參數傳入: response.addHeader("foo","bar");
但是向響應增加一個Cookie時,要傳遞一個Cookie對象。需要在Cookie構造函數中設置Cookie名和值。
Cookie cookie = newCookie("name",name);

response.addCookie(cookie);


還要記住,對於首部既有setHeader()方法,又有addHeader()方祛(如果已經有這個首部,addHeader會向這個現有的首部增加一個值,而setHeader會替換現有的值)。但是不存在setCookie()方法。只有一個addCookie()方祛!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章