20160329javaweb之JSP -session入門

破玉發表於2016-03-29

 

 

3.Session
Session 是一個域
!!作用範圍:當前會話範圍
!!生命週期:
當程式第一次呼叫到request.getSession()方法時說明客戶端明確的需要用到session此時建立出對應客戶端的Session物件.
當session超過30分鐘(這個時間是可以在web.xml檔案中進行修改的)沒有人使用則認為session超時銷燬這個session.
程式中明確的呼叫session.invalidate()方法可以立即殺死session.
當伺服器被非正常關閉時,隨著虛擬機器的死亡而死亡.
*如果伺服器是正常關閉,還未超時的session會被以檔案的形式儲存在伺服器的work目錄下,這個過程叫做session的鈍化.下次再正常啟動伺服器時,鈍化著的session會被恢復到記憶體中,這個過程叫做session的活化.
!!作用:在會話範圍內共享資料

!!session 的原理:
request.getSession()方法會檢查請求中有沒有JSESSIONID cookie,如果有拿出他的值找到對應的session為他服務.
如果沒有則檢查請求的URL後有沒有以引數的形式帶著JSESSIONID過來,如果有則找到對應的Session為瀏覽器伺服器
如果還找不到則認為這個瀏覽器沒有對應的Session,建立一個Session然後再在響應中新增JSESSIONID cookie,值就是這個Session 的id

預設情況下,JSESSIONID 的path為當前web應用的名稱,並且沒有設定過MaxAge,是一個會話級別的cookie.

這意味著一旦關閉瀏覽器再新開瀏覽器時,由於JSESSIONID丟失,會找不到之前的Session
我們可以手動的傳送JSESSIONID cookie,名字和path設定的和自動傳送時一樣,但是設定一下MaxAge,使瀏覽器除了在記憶體中儲存JSESSIONID資訊以外還在臨時資料夾中以檔案的形式儲存,這樣即使重開瀏覽器仍然可以使用之前的session

以下並不常用

URL重寫:
如果瀏覽器禁用了Cookie,瀏覽器就沒有辦法JSESSIONID cookie,這樣就用不了Session了.
我們可以使用URL重寫的機制,在所有的超連結後都以引數的形式拼接JSESSIONID資訊,從而在點選超連結時可以使用URL引數的方式待會JSESSIONID,從而使用Session
將URL進行重寫拼接上JSESSIONID的過程就叫做URL重寫

request.getSession() --在URL重寫之前一定要先建立出Session,才有Session id,才能進行重寫
response.encodeURL()--- 一般的地址都用這個方法重寫
response.encodeRedirectURL() --- 如果地址是用來進行重定向的則使用這個方法

*url重寫的方法一旦發現瀏覽器帶回了任意cookie資訊,則認為客戶端沒有禁用cookie,就不會再進行重寫操作

 

相關文章