首页 文章

存储在redis中的Express会话用于匿名

提问于
浏览
1

我正在使用Express 4.0与模块 express-sessionconnect-redispassport 进行管理会话 . 一切都可以登录和注销,我可以检索会话等 .

但我注意到一些奇怪的东西:即使我是匿名的,如果我要去redis并输入:

$ KEYS *

即使当前没有人连接,Redis也会返回一个条目 1) "sess:VWdwTjPXkITmqQ77xI8cotlltdrz7S8s" . 当我注销时,密钥会再次被另一个密钥更改 . 当匿名用户调用URL时,我的 req.sessionID 也会被设置 .

在这个网站https://engineering.linkedin.com/nodejs/blazing-fast-nodejs-10-performance-tips-linkedin-mobile我've read something about create session even for anonymous (7. Go session-free) and I think it'相关 .

我在主app.js文件中添加了midwhere,例如:

var
  passport = require('passport'),
  User = require('../models/user'),
  LocalStrategy = require('passport-local').Strategy,
  session = require('express-session'),
  RedisStore = require('connect-redis')(session);

app.use(session({
  store: new RedisStore(app.locals.services.session.config),
  secret: 'mysecretstring'
}));

app.use(passport.initialize());
app.use(passport.session());

passport.use(User.createStrategy());
passport.serializeUser(User.serializeUser());
passport.deserializeUser(User.deserializeUser());

我有问题,即使我从一个新的服务器开始,如果我尝试获取我无所事事的主页:

index: function (req, res) {
  res.render('home/index');
}

即使在这种情况下,我的redis中也会创建一个新密钥 .

Note: 如果我删除这两行,则不会创建任何键 .

app.use(passport.initialize());
app.use(passport.session());

所以,我的问题是:如何避免在Redis中为匿名用户创建密钥? (而且,不为匿名存储会话是个好主意吗?) .

谢谢 !

1 回答

  • 0

    如果您不希望为每个请求创建新会话,请在 express-session 中间件中将saveUninitialized设置为 false

    app.use(session({
      store             : new RedisStore(app.locals.services.session.config),
      secret            : 'mysecretstring',
      saveUninitialized : false,
    }));
    

相关问题