express中自定义session

我用express-session redis-conect这两个通用的方案来弄sesion的时候一直无效,然后我测试了cookie发现可以正常使用,行,那只能自己实现session了,
在express的脚手架环境下再准备好以下模块

    "redis": "^2.4.2",
    "uuid": "^3.2.1"

登录成功的逻辑中设置cookie

var UUID=require('uuid')
var token='token'+UUID.v1()
var redis = require('redis');
var client = redis.createClient(config.redis_port,config.redis_host);
client.on('connect',()=>{
    client.hmset(token, {
        "expires":Date.now()+config.token_expires_time, // NOTE: key and value will be coerced to strings
        "user": JSON.stringify(user)
    });
    res.cookie('token',token,{ expires:new Date(Date.now()+config.token_expires_time), httpOnly: true });
    return res.render('sign/signin', {success: '登陆成功'});
})

编写一个中间件

//判段用户是否登录
app.use(function(req,res,next){
    if(req.cookies.token){
    var redis = require('redis');
    var client = redis.createClient(config.redis_port,config.redis_host);
    client.on('connect',()=>{
      //将键值放入redis中进行查询
      client.hgetall(req.cookies.token, function (err, obj) {
        //以过期,被定时任务清除
        if(obj!=null){
          global.current_user=JSON.parse(obj.user)
        }else{
          global.current_user=false 
          res.cookie('token','')
        }
        next()
      });     
    })
  }
  else{
    global.current_user=false
    next()
  }
})

退出登录

    if(req.cookies.token){
        var redis = require('redis');
        var client = redis.createClient(config.redis_port,config.redis_host);
        client.on('connect',()=>{
            client.del(req.cookies.token,(err,response)=>{
                if (err) return false;
                res.cookie('token','')
                res.redirect('/');          
            })
        })
    }

再加上脚本定时清除过期的session。搞定

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值