session的本質使用cookie來實現。
原理大概是:http 帶來服務端提前設置cookie,服務端拿到標示用戶身份的cookie, 再去固定地點(數據庫,文件)檢索出對應的用戶身份。把身份賦值給本次請求的request,在程序處理中就知曉了用戶的身份了。 (在PHP,ASP或者其他服務端語言中都自動幫你實現了)
實現cookie
需要為每一個用戶設置一個可以標示用戶身份的cookie。可以使用如下規則
註冊郵箱MD5值+密碼MD5值+隨機碼MD5值。 (僅僅舉例,這可能並不是一個好的方案)
服務端代碼片段:
複製代碼代碼如下:res.setHeader("Set-Cookie", ["sid="+newUser.toCookie()+";path=/;domain="+config.domain+";expires="+new Date("2030") ]);
cookie
複製代碼代碼如下:sid=275fccab7935736ff68c95c3ddbfaaee|275fccab7935736ff68c95c3ddbfaaee|275fccab7935736ff68c95c3ddbfaaee
使用cookie 獲取用戶身份,設置session
把所有非靜態資源的請求都定向到這里處理。獲取cookie,把cookie拆分並在數據庫查找符合條件的用戶。最後使用next 跳轉到下一個請求邏輯。
下一個請求邏輯就可是直接使用req.session.user 來獲取user 對象了。
複製代碼代碼如下:session:function(req, res, next){
req.session = {};
if( req.cookies && req.cookies.sid ){
var a = req.cookies.sid.split("|");
var hexMail = a[0];
var hexPwd = a[1];
var hexRandom = a[2];
UserModel.hexFind(hexMail, hexPwd, hexRandom, function( status ){
//console.log("hexFind", status );
if(status.code == "0"){
//req.cookiesSelecter = cookiesSelecter;
req.session.user = status.result;
}
next();
});
}else{
next();
}
}
以上就是nodejs 的session 簡單使用的全部內容,希望能給大家一個參考,也希望大家多多支持武林網。