美文网首页
express-session使用

express-session使用

作者: Veb | 来源:发表于2018-06-29 20:30 被阅读0次

    Redis是一个非常适合用于Session管理的数据库。第一,它的结构简单,key-value的形式非常符合SessionID-UserID的存储;第二,读写速度非常快;第三,自身支持数据自动过期和清除;第四,语法、部署非常简单。基于以上原因,很多Session管理都是基于Redis实现的。

    Express已经将Session管理的整个实现过程简化到仅仅几行代码的配置的地步了,你完全不用理解整个session产生、存储、返回、过期、再颁发的结构,使用ExpressRedis实现Session管理,只要两个中间件就足够了:

    npm install express-session --save
    npm install connect-redis --save
    

    文档地址:
    express-session
    connect-redis

    var express = require('express');
    var session = require('express-session');
    var RedisStore = require('connect-redis')(session);
    
    var app = express();
    var options = {
         "host": "127.0.0.1",
         "port": "6379",
         "ttl": 60 * 60 * 24 * 30,   //Session的有效期为30天
    };
    
    // 此时req对象还没有session这个属性
    app.use(session({
         store: new RedisStore(options),
         secret: 'express is powerful'
    }));
    // 经过中间件处理后,可以通过req.session访问session object。比如如果你在session中保存了session.userId就可以根据userId查找用户的信息了。
    

    上述代码只是对于请求的Session静态处理,整个用户管理的另一个方面则是状态的切换(用户的登陆、登出)以及用户数据的获取。

    login:

    //查找用户信息,看是否满足登陆条件
        var user = findUser(username, password);
        if(user){
            //成功获取用户对象
            req.session.regenerate(function(){
                req.user = user;
                req.session.userId = user.id;
                req.session.save();  //保存一下修改后的Session
    
                res.redirect('/index');
            });  
        }
        else{
            //用户信息不符合,登陆失败
        }
    

    logout:

    //查找用户信息,看是否满足登陆条件
        res.clearCookie('connect.sid');
        req.user = null;
    
        req.session.regenerate(function(){
            //重新生成session之后后续的处理
            res.redirect('/login');
        })
    

    check:

        if(req.session.userId){
                next();
        }else{
                res.redirect('/login');
        }
        
    

    加油!

    相关文章

      网友评论

          本文标题:express-session使用

          本文链接:https://www.haomeiwen.com/subject/mqhzyftx.html