【问题标题】:request header can't get cookie when using res.cookie of Express 4.x使用 Express 4.x 的 res.cookie 时请求头无法获取 cookie
【发布时间】:2017-08-29 16:29:38
【问题描述】:

我只是想尝试设置 cookie 并在请求头中显示的基本方法。

前端只是一个带有用户名和密码文本输入的基本html表单,使用POST方法传输数据。

下面是基于 express 的代码。

服务器只接收req.body,然后将其设置为cookie,域:localhost:1338/base

cookieRouter.js:

var express = require('express');
var bodyParser = require('body-parser');
var cookieParser = require('cookie-parser');
var router = express.Router();
router.use(bodyParser.urlencoded({ extended: false }));
router.use(cookieParser());

router.get('/', function (req, res) {
    res.send('this is a router base page!');
});

router.get('/index1.html', function (req, res) {
    res.sendFile(__dirname + '/index1.html');
});

router.post('/index1.html', function (req, res) {
    res.cookie('name', req.body, { domain: 'localhost:1338', path: '/base' });
    res.send(req.body);
});

module.exports = router;

app.js

var express = require('express');
var app = express();
var cookieRouter = require('./cookieRouter.js');
app.get('/', function (req, res) {
    res.send('this is home page!');
});
app.use('/base', cookieRouter);
app.listen(1338);

运行app.js后,请求头明显有set-cookie值。但无法将其放入请求标头,并且 req.cookies 是空对象 {},即使在刷新 web 之后也是如此。

但如果我只是使用最简单的演示,它可以工作,例如:

router.get('/', function (req, res) {
    res.cookie('name', 'test');
});

还有一点,我觉得express的问题是只能发一个res.send(),res.redirect()... 默认会自动加head,否则会报错:Can' t 在发送后设置标题。 有人说添加return可以解决这个问题,但是我失败了,所以想知道怎么添加,谁能给个完整的demo?

【问题讨论】:

  • Can't set headers after they are sent的问题,和cookie无关,应该是新问题。

标签: node.js express cookies


【解决方案1】:

cookie 丢失是因为 domain 属性不正确 -- 需要将 'localhost:1338' 更改为 'localhost'。端口信息不应包含在domain 中。

是的,根据浏览器开发工具的网络面板,有一个Set-Cookie 响应头(如屏幕截图所示)。但是,如果你查看Chrome中的Application - Cookies面板(或其他浏览器对应的面板),你会发现:Set-Cookie header指定的cookie不存在。浏览器不会存储它,也不会在下面的 HTTP 请求中发送它。

另外请注意,由于cookie的路径是/base,所以只有以/base开头的HTTP请求才能发送cookie。

【讨论】:

  • 哇,正如你所说,当我以这种方式设置时:res.cookie('name', req.body, { domain: 'localhost', path: '/base' }); 这困扰了我一天,这只是一个低级问题。非常感谢。
猜你喜欢
  • 2021-01-16
  • 2016-11-08
  • 1970-01-01
  • 1970-01-01
  • 2023-02-03
  • 2022-01-12
  • 1970-01-01
  • 1970-01-01
  • 2014-05-27
相关资源
最近更新 更多