【发布时间】:2014-02-12 22:40:10
【问题描述】:
我正在使用 redis 将我的会话存储在 expressjs 中。它在本地运行时运行良好,甚至在部署在 heroku 上时大部分时间都可以运行。问题是经常(当部署在 heroku 上时)我看到我的会话更新丢失了。
例如一个用户登录到我的网站,我将他们的用户对象添加到会话中:
req.session.user = user;
但是(有时)当我稍后(在不同的请求中)尝试检索对象时,它不存在
//sometimes this is empty, even though I've just set it
var currentUser = req.session.user;
我如下初始化会话存储
if (process.env.REDISTOGO_URL) {
console.log('Connecting to redis:' + process.env.REDISTOGO_URL);
var rtg = require('url').parse(process.env.REDISTOGO_URL);
var redis = require('redis').createClient(rtg.port, rtg.hostname);
redis.auth(rtg.auth.split(':')[1]);
} else {
console.log('Connecting to local redis');
var redis = require('redis').createClient();
}
//sessions
app.use(express.cookieParser('secret key for cookie monster')); //used by session
var RedisStore = require('connect-redis')(express);
app.use(express.session({
store: new RedisStore({
client: redis
})
}));
有什么想法吗?我是否需要对会话数据进行某种刷新(或显式保存)?
【问题讨论】:
-
'稍后',你确定现在是在上一个请求完成之后吗?
-
当然可以,因为我的登录逻辑在完成之前不会加载下一页。谢谢你的想法
标签: node.js session heroku express redis