【发布时间】:2014-04-03 15:40:17
【问题描述】:
很可能解决方案是微不足道的,但我对文档并不幸运。 我正在使用express-session 中间件和connect-redis 会话存储,因此它将会话持久化到redis。
在我用FLUSHALL 刷新redis 之后,会话信息当然不再可用。然后,当我请求我的起始页时,会发送一个“旧的sid”,在redis 中找不到该快速会话,我最终得到req.session 未定义。这在一定程度上是有道理的——因为没有会话信息——但我不知道之后如何正确处理。
让我们进一步思考;如果用户在一周后没有返回,我的下一步将是从商店中删除旧会话(以释放随机流量空间)。因此,在那种情况下,当用户在 2 周后回来时,我会遇到同样的问题。
所以我的问题是,当它在 sessionstore 中找不到任何东西时,它为什么不创建一个新会话并发送一个新的 sid cookie?或者一个更好的问题而不是为什么,我怎样才能做到这一点?
req.session.regenerate() 是显而易见的方法,但由于req.session 是undefined,所以不能这样做:(
感谢您对这种情况的任何洞察!
/edit:这是我的会话代码;
var ExpressRedisStore = require('connect-redis')(express),
sessionStore = new ExpressRedisStore({
client:redClient
}),
app = express();
//... <- some middleware
app.use(express.bodyParser( {hash : 'md5'} ));
app.use(cookieParser);
app.use(express.session({
store: sessionStore,
key: "sid",
cookie:{
path: '/',
httpOnly: true,
maxAge: 3600*24*1000 //one day!
},
trustProxy:true,
rollingSessions:true
}));
app.use(userHandler.middleware()); //<-- my own middleware for userManagment
// here I fail because req.session is undefined
【问题讨论】:
标签: node.js session express connect session-management