【问题标题】:express session mangement快速会话管理
【发布时间】:2012-12-11 04:28:08
【问题描述】:
    var express = require('express');
    var app = express();
        app.use(express.cookieParser('keyboard 123'));

app.get('/', function(req, res){
  res.sendfile('./login.html');
});

        app.use(express.session());

            app.post('/login', function(req, res){

            console.log(req.body);
            if (req.session.user) {
                req.session.user=req.body.username;
              } else {
                req.session.user="test";

              }

        });




<form id="myform" action="/login" method="post" enctype="application/x-www-form-urlencoded">
  <input type="text" name="username" id="mytext" />
  <input type="submit" id="mysubmit" />
</form>

我正在尝试理解和使用 express node js 。 在这里,我有一个可以发布的表格。 我的理解是: 第一次没有可用的cookie(会话)。 因此,当我们收到请求时: req.session.user 将为空。 所以当我们发送200 OK。这个 req.session.user cookie 将被创建并存储在本地浏览器中。?随后在所有 req 中,这个 req.session 对象将被发送,对吗?

现在的问题是:我总是将 req.body.username 设为未定义。 我在登录页面中定义了相同的用户名。 我已经尝试过 console.log(req.body) 并且它总是未定义。 如果我没有会话,则正文部分有效。

如果我的理解是正确的,你能澄清一下吗?这段代码有什么问题。我在理解 session 的概念以及如何在 express 框架中使用它时遇到问题

【问题讨论】:

    标签: express


    【解决方案1】:

    您似乎混淆了请求和响应。如果您发布更大的代码摘录,我们可以提供更详细的帮助,但这是我对您的误解的看法。

    • 当 POST /login 到达时,您可以检查是否设置了req.session.user。如果是这样,则用户已经登录但再次登录,这不是通常的情况,但您可以执行类似res.send('You are already logged in as ' + req.session.user); 的操作
    • 如果req.session.user 未设置,则用户正在登录。通常您会确认用户知道正确的密码,但对于您的小测试应用程序,您只需像req.session.user = req.body.username 那样做,并以`res. send('你已经以'+ req.session.user身份登录);例如。

    还要确保在应用程序中正确配置了 cookieParser、session 和 bodyParser 中间件。

    【讨论】:

    • 谢谢彼得。我更新了完整的代码。我没有任何要在控制台中打印的代码。我没有为 console.log(req.body); 打印任何数据; 2)所以当我有cookie并设置好之后,当我回复req.session.user时,浏览器会自动将req.session作为cookie并在本地更新?那是我很困惑的部分
    • 那是不完整的代码。你的require 声明在哪里?你真的告诉 express 使用bodyParser 中间件吗?我认为您可能会犯一些容易纠正的错误,但由于您不会发布完整的代码示例,我无法帮助您。
    • 我添加了完整的代码。这里的 req.body 始终为 null ..这是第一个问题
    • 添加这一行:app.use(express.bodyParser()); 这是中间件,其工作是为您自动填充req.body
    • 你需要真正理解你正在编写的代码是做什么的。您让每个中间件都相互混淆。 bodyParser 的工作是为您解析传入的请求并填充req.bodysession 中间件将为您填充 req.session,但它不会在 cookie 中存储会话 ID 以外的数据。但是,您可以将数据存储在 req.session 对象中,并且您可以使用它,但实际上只有会话 ID 被发送到浏览器。
    猜你喜欢
    • 2017-01-07
    • 2013-03-15
    • 2022-01-26
    • 2021-03-19
    • 1970-01-01
    • 1970-01-01
    • 2018-02-12
    • 2016-11-23
    • 1970-01-01
    相关资源
    最近更新 更多