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