当前位置: 首页 > 面试题库 >

Node.js和Express会话问题

上官鸿晖
2023-03-14
问题内容

我在会话方面遇到问题,有时我 刚刚 设置的会话变量在下一页请求中未定义。为了正确设置变量,我通常必须再次执行该流程。

我可以确认我没有尝试将会话变量设置为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()

明确地讲,如果您不能在快速会话上回复,则在响应结束时为您调用它。

参考



 类似资料:
  • 问题内容: 我的Express应用程序中有一个受限制的区域“ / dashboard”。我使用一个非常小的函数来限制访问: 问题是当我通过调用注销用户时… …会话被终止,但是 当我在浏览器中单击“后退”按钮时,我从浏览器的缓存中获取了受限制的页面。 这意味着’/ dashboard’上没有GET,也没有用户登录验证。 我尝试在meta(玉模板)中使用no-cache,但仍然无法正常工作。 任何人?

  • 问题内容: 我当前正在使用一个Web应用程序,每次都调用此Web应用程序,请删除所有当前的Express会话,因此我需要一种方法来保留所有这些会话。我试图用connect- mongodb和connect- redis保留所有这些会话,但是都无效,nodemon总是说req.session是未定义的。我不知道该怎么做才能保留所有会话。 我需要一种方法来保留所有会话,执行时不要丢失它们,并为其提供教

  • 问题内容: 如果一个用户已经登录并尝试在新实例中再次登录,我希望它注销另一个用户实例。我不希望同一用户在我的应用程序上登录两次。 当前会话存储在Redis存储中,我正在使用express / connect处理会话存储。可以用来破坏会话的可用功能之一如下: 但是,我需要在调用.destroy()之前找到该会话ID。在Redis中,用户名存储为会话的一部分。 问题:是否可以查询Redis以基于用户名

  • 问题内容: 我有一个应用程序,需要能够通过身份验证请求然后向注册请求发布到https。目前,我可以将身份验证请求发布到https,并且工作正常。当我尝试将注册请求发布到https时,我不断收到服务器响应,说我需要进行身份验证。在尝试注册之前,我正在认证。 服务器的管理员说我可能没有保留该会话。 我是第一次使用android和java做东西。我是这个https内容的新手。我想知道是否有人可以在这里帮

  • 问题内容: 如何使 connect.sid cookie本身仅是会话cookie,而不是持久性cookie? 我尝试失败 但是cookie仍具有到期时间戳。 问题答案: 以上工作。因此,通过将maxAge设置为null,我确实管理了expressjs以使用会话cookie。ew

  • 有什么想法吗?