cookie是由服務器發送給客戶端(瀏覽器)的小量信息。數據庫
咱們知道,平時上網時都是使用無狀態的HTTP協議傳輸出數據,這意味着客戶端與服務端在數據傳送完成後就會中斷鏈接。這時咱們就須要一個一直保持會話鏈接的機制。在session出現前,cookie就徹底充當了這種角色。也就是,cookie的小量信息能幫助咱們跟蹤會話。通常該信息記錄用戶身份。express
固然cookie也常記錄跟蹤購物車的商品信息(如數量)、記錄用戶訪問次數等。json
cookie-parser 的做用就是設置,獲取和刪除 cookie。瀏覽器
var express = require('express'); //引入cookie-parser模塊 var cookieParser = require("cookie-parser"); //建立express實例 var app = express(); // 設定監聽端口 app.set('port', process.env.PORT || 3000); //建立cookie實例 app.use(cookieParser()); app.use("/login", function(req,res){ //獲取cookie console.log(req.cookies); //設置cookie,關閉簽名 res.cookie("user", {username: req.body.username}, {maxAge: 600000 , httpOnly: true, 'signed': false}); }); //監聽3000端口 var server = app.listen(app.get('port'),function(){ console.log("建立成功!") });
var cookieParser = require('cookie-parser'); #引入模塊 app.use(cookieParser()); #掛載中間件,能夠理解爲實例化
這兩行代碼默認在app.js
中寫好了,表示如今能夠直接使用 cookie 了。安全
res.cookie(name, value [, options]);
name 是 cookie 名,value 是 cookie 值,能夠是 json 對象或字符串。options 是選項,經常使用選項有:服務器
{ 'maxAge': 90000, # 有效時長,即90000毫秒後過時,String 'signed': false # 默認爲false,表示是否簽名,Boolean }
建立 cookie 會在 http 響應頭中添加Set-Cookie
,從而在瀏覽器中設置 cookiecookie
var cookies = req.cookies # 獲取cookie集合 var value = req.cookies.key # 獲取名稱爲key的cookie的值
res.clearCookie(name [, options])
name 是 cookie 名,options 與建立 cookie 時所傳一致 session
上面所寫 cookie 的各類操做,都是沒有通過簽名的。簽名能夠提升安全性。下面是使用簽名生成 cookie 的方法,大同小異,修改上文便可:app
修改實例配置:ui
app.use(cookieParser('ruidoc')); # 須要傳一個自定義字符串做爲secret
修改建立cookie配置
# 建立cookie的options中,必填 signed: true res.cookie(name, value, { 'signed': true });
修改獲取cookie方式:
var cookies = req.signedCookies # 獲取cookie集合 var value = req.signedCookies.key # 獲取名稱爲key的cookie的值
方案1:
直接把用戶名與密碼都保持到Cookie中,下次訪問時檢查Cookie中的用戶名與密碼,與數據庫比較。這是一種比較危險的選擇,通常不把密碼等重要信息保存到Cookie中。
方案2:
把密碼加密後保存到Cookie中,下次訪問時解密並與數據庫比較。這種方案略微安全一些。若是不但願保存密碼,還能夠把登陸的時間戳保存到Cookie與數據庫中,到時只驗證用戶名與登陸時間戳就能夠了。
方案3:
實現方式是把帳號按照必定的規則(密鑰)加密後,連同帳號一塊保存到Cookie中。下次訪問時只須要判斷帳號的加密規則是否相同便可。