如何在expressjs中获取cookie值

Kei*_*ima 10 cookies node.js express

我正在使用cookie-parser,所有教程都谈论如何设置cookie以及它到期的时间但是没有教我们如何获取这些cookie的价值

M M*_*our 37

对于偶然发现这个问题的人,我是这样做的:

您需要安装 express cookie-parser 中间件,因为它不再与 express 打包在一起。

npm install --save cookie-parser
Run Code Online (Sandbox Code Playgroud)

然后这样设置:

const cookieParser = require("cookie-parser");

const app = express();
app.use(cookieParser());
Run Code Online (Sandbox Code Playgroud)

然后你可以访问cookies

req.cookies
Run Code Online (Sandbox Code Playgroud)

希望有所帮助。


小智 19

希望能帮到你

const app = require('express')();
app.use('/', (req, res) => {
    var cookie = getcookie(req);
    console.log(cookie);
});

function getcookie(req) {
    var cookie = req.headers.cookie;
    // user=someone; session=QyhYzXhkTZawIb5qSl3KKyPVN (this is my cookie i get)
    return cookie.split('; ');
}
Run Code Online (Sandbox Code Playgroud)

输出

['user=someone', 'session=QyhYzXhkTZawIb5qSl3KKyPVN']
Run Code Online (Sandbox Code Playgroud)

  • 很好..推出您自己的解决方案而不是安装软件包! (2认同)
  • 我可以建议对 getcookie 进行一些改进吗?函数 getcookie(req) { const { headers: {cookie} } = req; return cookie.split(';').reduce((res,item) => { const data = item.trim().split('='); return { ...res, [data[0]] :数据[1] }; }, {}); 这个版本返回一个对象。 (2认同)

Sha*_*ndo 16

首先请注意,Cookie会通过服务器请求发送到客户端并存储在客户端.每次用户加载网站时,都会随请求一起发送此cookie.

因此,您可以使用在客户端(例如,在客户端Java脚本中)访问cookie

document.cookie
Run Code Online (Sandbox Code Playgroud)

您可以通过打开浏览器的控制台(F12)并键入来在客户端进行测试

console.log(document.cookie);
Run Code Online (Sandbox Code Playgroud)

您可以使用从服务器(在您的情况下,expressjs)访问cookie

req.cookies
Run Code Online (Sandbox Code Playgroud)

最佳做法是检查客户端是否正确存储.请记住,并非所有浏览器都允许在未经用户许可的情况下存储Cookie.

根据你的评论,你的代码应该是这样的

var express = require('express');
var app = express();

var username ='username';

app.get('/', function(req, res){
   res.cookie('user', username, {maxAge: 10800}).send('cookie set');
});

app.listen(3000);
Run Code Online (Sandbox Code Playgroud)


rep*_*iau 6

只是想补充一点,我们不应该使用模块来做琐碎的事情。模块是非常方便和快速的向前开发,但让我们无法通过创建基础结构代码来学习。

我是教授而不是老板,所以我更看重程序员的知识/技能发展,而不是在更短的时间内编写代码而不学习任何东西......

回到事业...

除非您需要签名的 cookie 或任何更复杂的东西,否则完全可以编写自己的中间件来解析 cookie 并将值添加到管道的其余部分,就像模块所做的那样。

app.use((req, res, next) => {
    const { headers: { cookie } } = req;
    if (cookie) {
        const values = cookie.split(';').reduce((res, item) => {
            const data = item.trim().split('=');
            return { ...res, [data[0]]: data[1] };
        }, {});
        res.locals.cookie = values;
    }
    else res.locals.cookie = {};
    next();
});
Run Code Online (Sandbox Code Playgroud)

您可以在任何需要读取 cookie 的地方通过res.locals.cookie方便地将其格式化为对象。

您甚至可以在此处添加自定义加密策略,以确保没有人阅读您的 cookie。

请记住中间件是有序的,因此必须在使用 cookie 的任何其他中间件或路由之前添加这个。

  • 很不错!我还建议使用更多的解构来使其更具可读性: const [name, value] = item.trim().split('='); return { ...res, [名称]: 值 }; (2认同)