我遇到了会话问题,有时候我刚刚设置的会话变量在下一个页面请求时会变成未定义。我通常需要再次执行流程才能正确设置变量。
我确认我的代码没有将会话变量设置为未定义;它们都具有合法值。
在我的应用程序中,用户从/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。
非常感谢任何帮助。