我在会话方面遇到问题,有时我 刚刚 设置的会话变量在下一页请求中未定义。为了正确设置变量,我通常必须再次执行该流程。
我可以确认我没有尝试将会话变量设置为undefined。他们有合法的价值。
在我的应用中,用户从/ twitter / connect /移至/ twitter / callback /。前者从Twitter检索一些oauth数据,后者将用户登录到Twitter。
/ twitter / connect /很简单:
app.get('/twitter/connect/?', function(req, res){ consumer().getOAuthRequestToken(function(error, oauthToken, oauthTokenSecret, results){ if (error){ // error handling here } else { req.session.oauthRequestToken = oauthToken; req.session.oauthRequestTokenSecret = oauthTokenSecret; // if I console.log the two session variables above // they have the proper values. res.redirect("https://twitter.com/oauth/authorize?oauth_token="+req.session.oauthRequestToken); } }); });
之后,twitter将它们发送回/ twitter / callback /:
app.get('/twitter/callback/?', function(req, res){ console.log(req.session.oauthRequestToken); console.log(req.session.oauthRequestTokenSecret); // more often than not, the two variables above are // undefined. but not always. usually on the first // pass, never on the second. });
我不知道发生了什么,我可以确认会话变量设置正确,它们只是在第一次请求时才在页面请求之间保持其值不变。
这就是我创建服务器的方式:
app.configure('development', function(){ app.use(express.cookieParser()); app.use(express.session({ secret:'yodawgyo' })); app.use(express.errorHandler({ dumpExceptions: true, showStack: true })); app.use(express.logger()); app.use(express.static(__dirname + '/public')); app.set('view engine', 'ejs'); app.set('view options', { open: '{{', close: '}}' }); });
我现在只有一个开发环境。我已经安装了Node 0.5.0-pre,但是在0.4.1上也看到了这个问题。我正在使用Express 2.3.2。
任何帮助深表感谢。
只是在同一个问题上挣扎并得到解决。简单的答案是打电话
Session.save()
明确地讲,如果您不能在快速会话上回复,则在响应结束时为您调用它。
参考