【问题标题】:Browser not sending back cookies, but curl does浏览器不发送回 cookie,但 curl 发送
【发布时间】:2013-08-13 11:46:23
【问题描述】:

我正在从头开始开发一个 nodejs 应用程序。我刚开始玩节点。我正在构建一个登录系统,但是我发现了一个问题:

当我使用正确的用户名和密码登录时,cookie 会设置一个“remember_token”值。它应该存储用户会话。这是我的 google chrome 浏览器中的 cookie

cookie设置正确,但是当浏览器发出新请求时,服务器中没有设置cookie值:

当我通过 curl 发出请求时,服务器会收到 cookie:

curl -i 'http://localhost' -b "remember_token=ZnVuY3Rpb24gbm93KCkgeyBbbmF0aXZlIGNvZGVdIH0wLjA1NTg2MzU1MTU2MjY1MTk5"

附加信息

在调用任何中间件之前,我在 app.js 中添加了这行代码:

app.use(function(req, res, next){
  console.log('\nrequest: ' + JSON.stringify(req.headers));
  next();
});

这是我从浏览器发出请求时的输出:

request: {"host":"node","connection":"close","cache-control":"max-age=0","accept":"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8","user-agent":"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.95 Safari/537.36","referer":"http://localhost/","accept-encoding":"gzip,deflate,sdch","accept-language":"es-419,es;q=0.8,en;q=0.6,en-AU;q=0.4,en-CA;q=0.2,en-US;q=0.2,en-NZ;q=0.2,en-GB;q=0.2,en-ZA;q=0.2","cookie":"connect.sid=s%3AB8g0VGivuIuOt4A9DKl3WMFu.625Hfc6W4TiMUJyK4X9clfeNa0Fi8Pd%2Fdmg0sSPAW5E","if-none-match":"\"-651269513\""}

不记得标头上的令牌 cookie。测试:google chrome、chromium 和 mozilla firefox。这是为什么呢?

更新

这就是我创建 cookie 的方式:

exports.identificar = function (req, res, success, fail) {
    var remember_token = null;
    var u;

    usuarios.findByEmail(req.body.sesion.email,function(usuario){
        if (usuario) {
            crypt.comparePassword(req.body.sesion.password, usuario.password_digest, function(err, resp) {
                if (err) {
                    fail('Hubo un error de encripción');
                } else if (resp) {
                    remember_token = usuario.remember_token;

                    u = usuario.toJSON();

                        delete u['password_digest'];
                        delete u['remember_token'];
                        delete u['fecha_token'];
                        delete u['token'];

                    if (typeof req.body.sesion.recordar !== "undefined"){
                        res.cookie('remember_token', remember_token, {expires: new Date(Date.now() + 900000), secure: true});   
                    } else {
                        res.cookie('remember_token', remember_token, {secure: true});
                    }
                    req.session.usuario = u;
                    success(u);
                } else {
                    fail('Contraseña incorrecta');
                }
            });
        } else {
            fail('Usuario no encontrado');
        }
    });
};

已解决

当我设置cookie时,我终于通过删除服务器中的“secure:true”选项来解决它,但是。为什么会这样?

【问题讨论】:

  • 你是如何设置cookies的?你能发布一些代码吗?
  • 您确定您在浏览器中接收到 cookie 吗?您检查了FireBug 中的标题吗?
  • 在 express 中,您使用 res.cookie() 设置 cookie。见expressjs.com/api.html#res.cookie
  • cookie 设置正确,我发布的第一张图片是来自 google chrome cookie 配置的屏幕截图。

标签: node.js cookies express


【解决方案1】:

安全选项用于安全连接,我在设置 cookie 时必须删除服务器上的“secure:true”标志。

【讨论】:

    猜你喜欢
    • 2011-08-07
    • 1970-01-01
    • 2019-03-28
    • 1970-01-01
    • 2014-04-09
    • 2019-08-19
    • 2023-03-15
    • 1970-01-01
    • 2020-02-16
    相关资源
    最近更新 更多