[Network] 04. Cookie & Session

 · 2 mins read

Http 是無狀態協議


是存放一些不重要的資訊在用戶端瀏覽器裡,用來增加網站的互動力,有有效期限。 帳號認證、追蹤網頁瀏覽行為、管理使用者的喜好資訊。

  • Server資訊儲存在 Client Browser
  • Cookie 最多只能存 4k Data。
  • 每次發請求都會夾帶 Cookie,會影響訪問網站的速度。
  • 可能儲存一些不安全的數據到 Cookie。
  • 有些瀏覽器可以把 Cookie 的功能關掉,若關掉後 Cookie 就不能使用。
  • 存放在 Client 端會依照目前網域來創建資料夾並存入。
  • 產生方式:
    • Web Server 產生Cookie 後丟給瀏覽器
    • Web Server 產生 JavaScript Code 丟給瀏覽器,瀏覽器產生 Cookie




Web Server 產生,將資訊存放一份在 client 端的 cookie 裡。 (去飲料店點餐告訴店員名字,店員點餐,產生一個號碼牌號碼牌(Cookie)編號為 0011(對應 Session ID)。如果你想去取飲料,你就得靠這張號碼牌(Cookie)去跟店員(Server)領,店員會跟據這號碼牌,認定你是顧客、是否點過餐、知道你點了什麼東西。)

  • 用在超大流量的網站服務:在現有的網站框架中,都預設採用 Cookie 來兌換資料。
  • Cookie 的交換會在建立連線時,在背景自動完成,因此開發者不必考慮 Client/Server 的號碼牌交換問題。
  • Browser 會在建立連線後,第一時間就自動在背景把 Cookie 上傳到 Server,Server 也在回傳資料時,第一時間自動把 Cookie 回傳給 Client。
  • 伺服器會把 Session 的資訊存在記憶體裡面。(主要的內容還是會暫存在server上,因此不會有被偽造的可能)
  • Login 之後,得到 Cookie ,之後都是用 Cookie 來辨識身分,有些 server 會辨識 IP 是否改變。
  • 如果改變 Cookie 就無法經過認證。
  • Session 本身是一個存放空間,也是用 key value 做資料存放,因此除了一些由 server 產生的內容會在建立時放進去
  • .NET
      HttpContext.Current.Session["UserId"]="12345";  //客製化的session內容
    



  • 實現方式:
    • 通常是 Cookie 會存取一組 Session 的 ID(在 Server 具備唯一性), 然後當 Browser 發出請求時,會夾此 Session ID,而 Server 會根據這組 ID 去拿 Session Data(資訊都存在 Server / DB)。1

  1. Client 瀏覽器發送 POST 帳號密碼給伺服器
  2. Server 做內部驗證,通過之後 response headerset-cookie 命令瀏覽器設置 cookie,包含 Session ID 和一些資訊(像是有效時間或者特定的內容),和回應 Http 200 ,並且把這個 ID 對應到的內容存在記憶體裡面。
  3. 瀏覽器收到 set-cookie 這個 header 之後,根據需求設定好 cookie。
  4. 瀏覽器需要權限的頁面,瀏覽器會自動把所有 cookie 一起放在 request 裡面帶上去(不一定要 Post 或 Get)。
  5. Server 收到 cookie,檢查有沒有 Session ID,檢查通過,知道這個人剛才登入過。



  • Session 可以存成實體檔案??
    • 利用 process 的 memorycache 來存放,但是這個預設方式可能因為程式錯誤造成 process crash,sessionID 會被清空
    • session 的存放方式還可以改成用實體檔案來存放或者放到 DB 內
  • 那 session 會不會被盜用??
    • 有加密,存成實體檔案時它會做加解密
    • 有期限,IIS 有一條預設 session 的生命週期是 20 分鐘




Third-party cookies [1]

  • 一個網站呈現出來,可能會去其他 Server 取得資料,其他的 Web Server 可能也會送 cookies給你。
  • 可以透過 Third-party cookies 可以去追中使用者,跨網站的瀏覽行為。
  • 像是廣告公司,在很多不同的網站上放廣告,但這廣告資料是來自同一台 Server
  • 兩個不同網站存在相同廣告,網站去讀取廣告圖片時,就會在圖片後面加上?和參數(cia.gov),告訴 廣告 Server 說,使用者是瀏覽哪一個網站,圖取圖片時,並將 Cookie 送給 使用者。 ​


JSON Web Token 1

讓 client 和 server 跨環境做資料的存取,並且又有身分驗證的機制。 與 Session 類似,原本伺服器那邊儲存的資訊,現在改由 Client 端來儲存。

  • 發出請求方式:
    • 驗證的 token 放在 header 的 Authorization,使用 GET 請求。
    • 放在 Request Body,POST 請求方式。
    • 放在 URI 裡。
  • 實現方式:
    • Client 發送帳號密碼給 Server
    • Server 驗證通過,加密過後生成 rgjio43t43jto439i0ff2f 這一串 JWT 給 Client
    • Client 的下一個 request 再帶上 rgjio43t43jto439i0ff2f
    • Server 解密,解出 rgjio43t43jto439i0ff2f 這一串文字是:{username: ‘peter’},得知他是 peter




18/9/5 作業

  • 請描述一下 Cookie 和 Session 的差異?
    • Server 在用戶發送需要驗證身分的請求時,驗證通過會產生Session,並將 SessionID 還有一些資料回應給用戶瀏覽器,瀏覽器會設置 Cookie 放在用戶的瀏覽器中
    • Session 存放在 Server;Cookie 存放在用戶瀏覽器中
  • 那些情境會用 Cookie 那些會用 Session ?
    • Session :產生-用戶傳來帳密時驗證通過時。使用-用戶使用 Cookie 請求時,利用 Cookie 裡的Session ID 來找尋 Server 裡的 Session
    • Cookie:產生-通過驗證接收到 Server 回應後,瀏覽器會設置 Cookie。使用-在需要驗證身分的頁面發送請求時會夾帶Cookie




ref:

  • https://ithelp.ithome.com.tw/articles/10187441