nodejs 的 session 簡單實現


session 不用多介紹,使一個http可以對應一個終端用戶。

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();

        }  
      
    }

 

完  

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM