我正在使用Express 4.0与模块 express-session
, connect-redis
和 passport
进行管理会话 . 一切都可以登录和注销,我可以检索会话等 .
但我注意到一些奇怪的东西:即使我是匿名的,如果我要去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 回答
如果您不希望为每个请求创建新会话,请在
express-session
中间件中将saveUninitialized设置为false
: