Express.js中req.cookies和req.signedCookies的区别

req.cookies

Request.Cookie应该是来自客户端(浏览器)的cookie,而Response.Cookies是将发送回客户端(浏览器)的cookie。Cookie 是随服务器请求发送到客户端并存储在客户端的小文件/数据。这有助于我们跟踪用户的操作。

Cookie 解析器是一个中间件,用于解析附加到客户端请求对象的 Cookie。当我们使用 cookie 解析器中间件时,此属性是一个包含请求发送的 cookie 的对象。如果请求不包含 Cookie,则默认为{ }

示例:

var cookieParser = require('cookie-parser');
var express = require('express');
var app = express();
var PORT = 3000;

app.use(cookieParser());

app.get('/user', function (req, res) {
    req.cookies.name='Yiibai';
    req.cookies.age=26;

    console.log(req.cookies);
    res.send();
});

app.listen(PORT, function(err){
    if (err) console.log(err);
    console.log("Server listening on PORT", PORT);
});

打开浏览器并向 http://localhost:3000/user 发出 GET 请求,现在可以在控制台上看到以下输出:

Server listening on PORT 3000
[Object: null prototype] { name: 'Yiibai', age: 26 }

req.signedCookies

req.signedCookies 属性包含由请求发送的签名 Cookie,未签名,可在使用 cookie 解析器中间件时使用。对 Cookie 进行签名不会使其隐藏或加密,而只是防止篡改 Cookie。它的工作原理是创建值(当前 cookie)的 HMAC,并对其进行 base64 编码。当 cookie 被读取时,它会重新计算签名并确保它与附加到它的签名匹配。如果不匹配,则给出错误。如果未发送签名的 Cookie,则属性默认为 { }

示例:

var cookieParser = require('cookie-parser');
var express = require('express');
var app = express();
var PORT = 3000;

app.use(cookieParser());

app.get('/user', function (req, res) {

    // Setting multiple cookies
    req.signedCookies.title='yiibai';
    req.signedCookies.age=27;

    console.log(req.signedCookies);
    res.send();
});

app.listen(PORT, function(err){
    if (err) console.log(err);
    console.log("Server listening on PORT", PORT);
});

打开浏览器并向 http://localhost:3000/user 发出 GET 请求,现在可以在控制台上看到以下输出:

Server listening on PORT 3000
[Object: null prototype] { name: 'Yiibai', age: 27 }

req.cookies和req.signedCookies之间的区别 –

req.cookies req.signedCookies
无法确定返回给 cookie 的数据是否被客户端修改。 如果希望确保返回给 Cookie 的数据未被客户端修改,使用签名的 Cookie。
如果请求不包含 Cookie,则默认为 { } 如果未发送签名的 Cookie,则此属性默认为 { }。
服务器无法检测客户端是否更改了 Cookie。 服务器可以检测客户端是否更改了 Cookie。
没有向 cookie 添加签名的情况。 签名与实际的 Cookie 数据一起作为 Cookie 的一部分添加。签名派生自 Cookie 数据和只有服务器知道的机密。

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/294952.html

(0)
上一篇 2023年2月28日
下一篇 2023年2月28日

相关推荐

发表回复

登录后才能评论