express-session使用

2018-07-17  本文已影响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:

//查找用户信息,看是否满足登陆条件
    req.clearCookie('connect.sid');
    req.user = null;

    req.session.regenerate(function(){
        //重新生成session之后后续的处理
        res.redirect('/login');
    })

check:

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

上一篇下一篇

猜你喜欢

热点阅读