zoukankan      html  css  js  c++  java
  • 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();
    
            }  
          
        }

    完  

      

  • 相关阅读:
    基于python实现自动化办公学习笔记一
    [django]上下文管理器
    [django]中间件
    分布式锁实现
    为什么Redis可以方便地实现分布式锁
    索引字段说明
    COUNT 和 IFNULL函数
    占用空间区别
    java排序算法(七):折半插入排序
    java排序算法(六):直接插入排序
  • 原文地址:https://www.cnblogs.com/idche/p/3040622.html
Copyright © 2011-2022 走看看