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

快速请求每个请求的更改会话

楚德辉
2023-03-14
问题内容

我有登录功能

app.post('/doLogin', function(req,res){
        db.users.findOne({username: req.body.username}, function(err, user) {
            if( err ) {
                console.log("Login fail");
            } 
            else if (user != null) {
                if (req.body.password == user.password) {
                    req.session.user_role = "user";
                    req.session.save();
            } else {
                req.session.user_role = "null";
                console.log("Wrong login");
            }
        }
        res.send({redirect: "/"});
    });

});

此函数用于将变量保存到会话中,req.session.user_role = "user"; 但是当新请求检查用户是否登录时

app.get('/', function(req,res){
    redis.get('sess:' + req.session.id, function(err, result){
        console.log("Get session: " + util.inspect(JSON.parse(result),{ showHidden: true, depth: null }));
    });
    if ((req.session.user_role == "user")) {
          console.log("Logged in");
    } else {
        console.log("Logged out");
    }
});

然后返回总是“注销”,因为会话已更改。我使用Redis来存储会话,我认为这是Redis的错误,因为当我停止使用Redis时,可以,请帮帮我!


问题答案:

最好的处理方式是始终让Express处理它(如果可以的话)。

https://flaviocopes.com/express-sessions/(更新了会话教程,尽管不应将链接视为答案)

有一个链接可以向您展示如何为Express中的会话设置Redis。在处理会话时,您甚至不必查询自己的redis,这是节点中中间件的工作。



 类似资料:
  • 我一直有一个问题,当请求来自域名而不是localhost时,会话变量不可用。例如,如果我设置一个用户变量: 当客户端发出另一个请求并且我尝试访问用户会话变量时,它返回null。 我注意到,在每个请求中,都会设置一个新的JSESSIONID cookie,并且ID值会更改。这是否意味着每次客户端访问服务器时都会创建一个新会话?如何在客户端之间保持相同的会话,以便我可以在Http会话中存储对象并访问它

  • 我找到了很多关于这个问题的答案,但没有解决我的问题-所以我想给你看我的代码,希望有人能找到错误... 我有一个标准的超文本标记语言的形式,给一些数据与POST到下一个. php文件,我得到它,并将其保存到会话变量。我使用会话变量有两个原因: 如果有人重新加载页面,它应该显示与以前相同的信息 我需要在即将到来的php文件中的变量 代码如下: 第一个调用工作精细会话变量被设置,回声给出正确的值。重新加

  • 我们正在尝试使用Drool作为我们的规则引擎服务。我们到目前为止所做的如下 部署的工作台7.2.final 已部署的KIE服务器7.2.0。final 配置了一些数据对象、规则,将更改部署到KIE服务器,我们可以使用rest API执行规则 无状态会话满足了我们的大部分需求(给出一组数据,执行规则并返回数据,仅此而已)。但是使用无状态时,我们必须牺牲Drools有状态会话提供的许多重要特性。 我们

  • Web 开发中经常需要处理 HTTP 请求、重定向和会话等诸多事务,相应地,Flask 也内建了一些常见的对象如 request, session, redirect 等对它们进行处理。 请求对象 request HTTP 请求方法有 GET、POST、PUT 等,request 对象也相应地提供了支持。举个例子,假设现在我们开发一个功能:用户注册。如果 HTTP 请求方法是 POST,我们就注册

  • 我正在尝试使用JSoup访问java中的在线api。通过我的浏览器,我可以很好地导航到url,并得到json数据作为回报。但是,如果我使用Jsoup,url会发生更改,并且会从中删除“/api”。例如:https://www.onehash.com/api/archived_contest/122/我可以通过浏览器很好地打开它,但如果我使用jsoup连接到它,url就会变成https://www.

  • 我正在尝试将的接口扩展为: 但我得到了以下错误: 没有与此调用匹配的重载。重载1/3'(路径:PathParams,…处理程序:RequestHandler