儲存Session ID 的幾種方式
1 儲存session ID 的方式可以採用cookie,這樣在互動過程中瀏覽器可以自動的按照規則把這個標識傳送給伺服器
2 由於cookie可以被人為的禁止,必須有其他機制在cookie被禁止時依然能夠把session ID傳遞迴伺服器,經常用的一種技術叫URL重寫,就是把session ID附加在url路徑後面,附加有2種方式
a,作為url路徑的附加資訊 http://…../xxx;jsessionid=ByOK3vjFD75aPnrF7C2H
b,作為查詢字串附加在url後面 http://……?……&jsessionid=ByOK3vjFD75aPnrF7C2H
要想要網路在整個互動過程中始終保持狀態,必須在客戶端所有可能傳送請求的路徑後面都新增上這個session ID
3 還有一種叫做表單隱藏欄位,在伺服器端會自動修改表單,新增一個隱藏欄位(隱藏欄位的value如果不放在表單裡再好好搞一下可以把抓取頁面的人噁心死)以便使用者在提交表單時,把session ID傳回伺服器
session ID什麼時候建立呢?
錯誤的以為是:有客戶端訪問時就建立,我感覺沒必要 有些使用者只是上來看看有必要給他建立session麼!?浪費資源,當伺服器某個server(如servlet)呼叫HttpServletRequest.getSession(true)這樣的語句時才會建立session(一般是要有一些業務需求了)
URL重寫的弊端:
對所有URL都要重寫啊,包括超連結,form,action,重定向的url,每個站點引用你的url,返回給使用者的url(即使通過間接手段,比如response.headers中的Location欄位)都要新增額外的欄位,艹,麻煩死 !
這樣搞你的站點不能包含任何的靜態頁面(至少不能有連結到動態頁面的連結),每個頁面必須由servlet或jsp
(這裡不知怎麼說好,jsp編譯了也是servlet啊)動態生成,即使所有都動態生成了,如果使用者離開會話(例如我出去上了個廁所,session超時了)從收藏夾或書籤或連結中找回來,這是會話資訊已經沒了,因為儲存下來的連結有錯誤的標識資訊-Session ID已經過期啦!
表單隱藏欄位的弊端:
你的站點每個頁面必須是由表單提交而生成的吧!你單擊一個超文字連結肯定是不會有表單生成的,不能提供會話跟蹤啊