gpt4 book ai didi

node.js - 使用 Express 4.x 的 res.cookie 时请求头无法获取 cookie

转载 作者:太空宇宙 更新时间:2023-11-04 03:24:50 26 4
gpt4 key购买 nike

我只是想尝试设置 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值。但无法将其放入请求 header ,并且 req.cookies 是空对象 {},即使在刷新网页后也是如此。

enter image description here

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

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

还有一点,我觉得express的麻烦在于只能发送一个res.send()res.redirect()...,默认情况下它会自动添加头,否则会出现错误:发送后无法设置头。有人说添加return可以解决这个问题,但是我失败了,所以想怎么添加,谁能给个完整的demo吗?

最佳答案

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

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

另外请注意,由于 Cookie 的路径为 /base,因此只有 URL 以 /base 开头的 HTTP 请求才能发送 Cookie。

关于node.js - 使用 Express 4.x 的 res.cookie 时请求头无法获取 cookie,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45933518/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com