筆記、Session 整理


session 機制

讓 Request 變成 stateful的機制、具有狀態的一段期間

因為 http 的無狀態性,無法記憶狀態,所以需要倚靠 session 機制進行狀態管理。session 就是讓 request 變 stateful 的機制。

實做 session 機制

(不是只能透過 cookie 才能實作 session 機制)

  • url : 利用 get 的方式將資訊帶到網址列上,server 透過網址列進行狀態儲存
  • Cookie : server 利用 set-cookie 將資訊存在 cookie 中,這些內容會在瀏覽器發 request 給 server 時帶上來。cookie 就是為了實作 session 而誕生,藉由標準化的規範制定一個專門用來讓瀏覽器與 Server 交換資料的機制。
1. 瀏覽器發 request 給 server
2. server 叫瀏覽器 set-cookie
3. 瀏覽器把資料儲存在 cookie
4. 瀏覽器帶著 cookie 發 request 給 server
5. server 依據 cookie 的內容決定狀態

將狀態存在 Cookie 裡面,讓 Request 之間能夠變得有關聯,但因為 cookie 的內容可以被竄改,所以

解法一、Cookie-based session

  • 思路:cookie 裡面的資訊讓他無法改
  • 具體作法:將 cookie 內容給加密,也就是我將所有 session 狀態都存到 cookie 中。這個狀態可以存成檔案,也可以存在記憶體、資料庫。
  • 缺點:cookie 大小有限制、加密方式與密鑰可能被破解

解法二、session ID

  • 思路:將資訊存在 server 端,透過一個 ID 來辨識身份
  • 具體作法:Server 只在 Cookie 裡面存一個 Session ID,其餘的狀態都存在 Server 那邊。(透過 Server 傳送 Set-Cookie 這個 header 來設置資訊,並且靠瀏覽器傳送 Cookie header 把之前儲存的資訊一併帶上來,這樣子就有了狀態,就開啟了一段 Session)
  • 缺點:session ID 通常存在 COKIE 中,一旦被偷走,對方就可以偽造身分進行登入

結論

建立 Session 之後,所儲存的狀態就叫做 Session information,可以翻作 Session 資訊。若是選擇把這些資訊存在 Cookie 裡面,就叫做 Cookie-based session;還有另一種方法則是在 Cookie 裡面只存一個 SessionID,其他的 Session 資訊都存在 Server 端,靠著這個 ID 把兩者關聯起來。


QA
Q:The Secure Attribute:設置 Secure 屬性代表什麼 ?
A:代表這個 Cookie 只能透過 secure 的管道被傳輸,至於什麼是 secure,RFC 上寫說由瀏覽器自行定義。依據目前主流的實作,就是指只能透過 HTTPS 來傳送

#session






你可能感興趣的文章

React 增進效能,避免重複渲染 Rerender

React 增進效能,避免重複渲染 Rerender

Template Literals 與 Destructuring

Template Literals 與 Destructuring

Python - 隨機模組(random)

Python - 隨機模組(random)






留言討論