[cookie篇]cookie-parser之parser.js

cookie-parser的做用,官方的說法是:Parse Cookie header and populate req.cookies with an object keyed by the cookie names.個人理解是,轉換headers中的cookie並跟req.cookies合併。做爲cookie-parser的核心,parser提示了2個函數:signedCookies和JSONCookies,以及它們的幫助函數。
 
此文到這裏也就結束了這個插件,讓咱們來回顧一下,同時也打開了下一篇關於session的學習。
 
cookie-parser從客戶端取cookie,而後通過express-session(以express爲本)的處理。在客戶端表示爲一個簽名後的字符串,在服務端,因爲使用了unsign方法,因此能看到解簽過的字符。這樣一來,全部的迷底都解開了。咱們來看看session那段處理cookie的代碼吧。
 
function setcookie(res, name, val, secret, options) {
  var signed = 's:' + signature.sign(val, secret);
  // ....省略
 
  res.setHeader('set-cookie', header)
}
此處利用set-cookie寫入cookie。當客戶端發送cookie,此時就用到了parser.js的signedCookies。
 
exports.signedCookies = function(obj, secret){
  var cookies = Object.keys(obj); 
  var dec; 
  var key;
  var ret = Object.create(null);
  var val;
 
  for (var i = 0; i < cookies.length; i++) {
    key = cookies[i]; 
    val = obj[key];   
    dec = exports.signedCookie(val, secret); 
  
    if (val !== dec) { 
      ret[key] = dec;
      delete obj[key];
    }
  }
 
  return ret;
};
 
exports.signedCookie = function(str, secret){ 
  return str.substr(0, 2) === 's:'
    ? signature.unsign(str.slice(2), secret)
    : str;
};
在幫助函數signedCookie中,當發現含有s:開始則是簽名過的cookie,這時就用了signature.unsign解籤。下次,讓咱們來研究一下session。
相關文章
相關標籤/搜索