tags: Web Design

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如何保持会话
 
沒有留言:
張貼留言