怎麼都沒有人開門見山說一下這是啥。
簡述
自從學 Express 就一直好奇這段 code 的意思:
1 | app.use(session({ |
網路上找了很多文章都只寫一些像是:
- 用來認證該 Session 的資料
- 用于生成 session 的安全字符串
- 用于加密目标数据用的字符串
好,能看出它跟加密的東西似乎有點關係,但好像還是很抽象?
好在 Huli 寫的 深入 Session 與 Cookie:Express、PHP 與 Rails 的實作 有提到 Express 是怎麼實作 session 的,這邊節錄幾個段落:
那這個 sessionID 是以什麼樣的形式存進 Cookie 的呢?
1 | var cookie = require('cookie') |
內容的部分比較特別一點,會以 s: 開頭,後面接上 signature.sign(sessionID, secret) 的結果。
把重點放在 function setcookie(res, name, val, secret, options) { ... }
,其實答案就出來了。
簡單來說 cookie 最後的值會是 s:
加上 signature.sign(val, secret)
產生的一段字串(也就是所謂的鑑別碼)。從這裡能看到 secret
會被丟到 function 裡面做了某些事以後產生一個鑑別碼,既然如此 secret 的用途就很直白了。
secret 就是產生鑑別碼時會一起放進去的自定義字串(或想成是雜湊前要先加鹽的概念)
就是這麼簡單。
所以很多人要你用「環境變數」來設定 secret
就是這個原因。