node會話管理——cookie-parser

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 了。安全

建立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

獲取cookie

var cookies = req.cookies # 獲取cookie集合 var value = req.cookies.key    # 獲取名稱爲key的cookie的值

刪除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的值

 

使用cookie記住密碼

方案1: 

    直接把用戶名與密碼都保持到Cookie中,下次訪問時檢查Cookie中的用戶名與密碼,與數據庫比較。這是一種比較危險的選擇,通常不把密碼等重要信息保存到Cookie中。 

方案2: 

    把密碼加密後保存到Cookie中,下次訪問時解密並與數據庫比較。這種方案略微安全一些。若是不但願保存密碼,還能夠把登陸的時間戳保存到Cookie與數據庫中,到時只驗證用戶名與登陸時間戳就能夠了。 

方案3: 

    實現方式是把帳號按照必定的規則(密鑰)加密後,連同帳號一塊保存到Cookie中。下次訪問時只須要判斷帳號的加密規則是否相同便可。 

相關文章
相關標籤/搜索