Web Design
tags: Session
-
Web容器會為你建立 HttpSession 物件,每個 HttpSession 物件都會有個特殊的 ID,稱之為SessionID
-
SessionID 預設會使用 Cookie 存放至瀏覽器
-
Web 容器儲存 Session ID 的 Cookie 預設為關閉瀏覽器就失效
- 失效的是瀏覽器上的 Cookie
- getSession() 時,容器會產生新的 HttpSession
- 大部分Session機制都使用會話Cookie來保存Session ID,而關閉瀏覽器後因為Cookie消失造成 Session id也消失了,但只要把原來的Session ID再發送給Server,那還是能夠找到原來的Session
-
設定 HttpSession 預設的失效時間
setMaxInactiveInterval()
:單位為秒<session-timeout>30</session-timeout> <!-- 30 分鐘 -->
Cookie
- 瀏覽網頁時,網頁要求存在 local 的資料。
- 在存 cookie 時,會指定這個 cookie 的有效期限
- 當然可以設為永遠有效,但不常見
- Cookie就是用來繞開HTTP的 stateless 無狀態性的「額外手段」之一
常用屬性
- domain (String) 適用此cookie的domain name
- encode (函式) 用於cookie編碼的同步函式,預設encodeURIComponent.
- expires (date) cookie的到期日,超過此日期,即失效。
- httpOnly (boolean) 標記此cookie只能從web server 訪問,以避免不正確的進入來取得竄改。
- maxAge (number) 設定此cookie的生存時間(毫秒為單位),比方60000(10分鐘後到期,必須重新訪問)
- path (String) 適用此cookie的路徑,預設: “/”.
- secure (boolean) 設定此cookie是否只在https使用。
- signed (boolean) 此cookie是否要設簽章。(如果是true,必須使用cookie-parser設定簽章 )
- More Detail:Set-Cookie
Signed Cookie
- 和此屬性 signed(boolean) 有關,此cookie是否要設簽章。
- 如果是true,必須使用cookie-parser設定簽章
Cookie & Login
- cookie 跟登入的狀態,是兩件事
- 因為 cookie 常常用來存放登入的帳號及密碼,如果有 cookie,你可以直接進入網頁,所以會有你還在線的錯覺
- 但是有一些情況下,你已經關閉了該網頁,但是你的 brower 還開著,這時候如果有網站是用檢查 cookie 存放的資料,來判斷你是否仍在線,或是檢查該網頁所使用的 network connection 是否還連著,這時候就會誤判了。
How to stay logged in?
- 原先 Cookie 預設為關閉瀏覽器就失效
- 但各個網站可以自行設定 Cookie 的 lifetime(參考常用屬性),以改變第1點的情況發生
- cookie 靠第一次連線獲得的sessionId來進行後續的stay logged in
若Cookie停用,還是能登入成功,WHY?
-
Session 有兩種傳遞方式
- Cookie
- URLs
-
將sessionID放在URL中:
ch7-2-1a.php?PHPSESSID=8234c3f661bd1eac450c23d5650e0881
- 使用者沒有在正常登出後清除 session 時,其他人可能會盜取這一組 URLs 來取得使用者的權限或資訊
- 不管 session 是使用 cookie 或 URLs 方式傳遞 session id,進一步的驗證都是必要的,目前最常用的驗證方法是加上使用者 IP 的資訊
-
因網路安全考量,大多數網站不支援此種登入方式
-
實作方式:浏览器禁用cookie如何保持会话
沒有留言:
張貼留言