服务器未从浏览器(localhost/127.0.0.1)express.js接收cookie

问题描述 投票:0回答:1

我遇到了 cookie 问题,它们被创建,被发送到浏览器,浏览器将 cookie 发回,但 req.cookies 在服务器中未定义...

我做错了什么?

谢谢您的帮助。

我尝试过在 localhost 和 127.0.0.1 中使用所有环境,结果完全相同,cookie 被写入浏览器中并发送回,但是 req.cookies 在这两种情况下都未定义。

header request

Accept:
text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
Accept-Encoding:
gzip, deflate, br
Accept-Language:
es-ES,es;q=0.9
Cache-Control:
max-age=0
Connection:
keep-alive
Cookie:
sessionId=example
Host:
127.0.0.1:3000
If-None-Match:
W/"7-PEnZzDwMg0IaHPuSHN1Ko13Bulw"
Sec-Ch-Ua:
"Not A(Brand";v="99", "Opera GX";v="107", "Chromium";v="121"
Sec-Ch-Ua-Mobile:
?0
Sec-Ch-Ua-Platform:
"Windows"
Sec-Fetch-Dest:
document
Sec-Fetch-Mode:
navigate
Sec-Fetch-Site:
none
Sec-Fetch-User:
?1
Upgrade-Insecure-Requests:
1
User-Agent:
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36 OPR/107.0.0.0
/index.ts  

import cookieParser from 'cookie-parser'; 
[...] 
app.use(cookieParser('' + process.env.COOKIE_SECRET)); 
[...] 
app.use('/', indexRouter)
/routes/index.ts

import express from 'express';
const router = express.Router();

/* GET home page. */
router.get('/', function (req, res, next) {
    console.log(req.cookies); // always undefined
    res.cookie("sessionId", "example");
    res.send("running");
});

export default router;
node.js express cookies
1个回答
0
投票

最后我所做的是直接从标头手动读取 cookie。因为我怀疑问题是由 localhost 引起的,所以我创建了一个中间件,它将使用 cookie 解析器作为第一个选项,如果它不起作用,我会手动读取并解析标头中的 cookie。这是代码:

export function cookieReader(req: any): { [key: string]: string } | undefined {
    if (req.cookies !== undefined) {
        return req.cookies;
    }
    if (req.headers.cookie !== undefined) {
        let cookie: any = {};
        req.headers.cookie.split(/\W*\;\W*/g).forEach((x: any) => {
            const kv = x.split(/\W*\=\W*/g);
            cookie[kv[0]] = decodeURIComponent(kv[1]);
        });
        return cookie;
    }
    return undefined;
}
© www.soinside.com 2019 - 2024. All rights reserved.