iT邦幫忙

2

Session和Cookie

石頭 2017-10-01 11:45:3413179 瀏覽

Http是無狀態協議.如果要做一個登入系統

怎麼知道使用者是否已經登入了?Session和Cookie可以解決我們需要存資料的問題

Session:

Session存在於Server端,Session會將我們想要儲存的資料存在於Server端。

Asp.net為例:

`HttpContext.Session["UserId"]="12345";`

上面的程式碼可將資訊存於Server的記憶體中
但如果今天有兩個使用者請求Server同時將Session["UserId"]附值,請問會依照誰的為主?

答案:兩個都會存在,因為兩者Session物件是獨立的,伺服器會依照"SessionId"來辨識而SessionId
SessionId以cookie的形式存在,會存在Client

Cookie:

一般瀏覽器會限制:

  • 每個使用者的瀏覽器只能支援(存取)300個Cookie
  • 每個瀏覽器只能針對同一個伺服器存取20個Cookie
  • 每個Cookie的大小最多僅4k Bytes的容量
  • 有些瀏覽器可以把Cookie的功能關掉,若關掉後Cookie就不能使用
  • 存放在Client端會依照目前網域來創建資料夾並存入

(其實Http協議並無以上這些限制,這些限制是瀏覽器給的><)

保存帳號密碼的登入系統為例:

  1. 使用者在登入頁面輸入帳號和密碼,提交表單
  2. 將合法用戶資訊存入Session中並將用戶資料存入Cookie中回傳
  3. Client收到回傳的Http回應頭中有 Set-Cookie 會依照提供的資訊來存放Cookie
  4. 下次請求時Http請求時會先去尋找當前網域的資料夾中有無cookie,如果有會一並傳到Server端

注意:cookie存放在client端 也就代表會有安全上的疑慮

  1. 我們在cookie中加密來增加安全性
  2. 別在裡面存一些機密資料,例如:帳號·密碼...
  3. 可以存取Token讓server去找說此token是否合法可以使用

參考資料:
https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie


尚未有邦友留言

立即登入留言