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

  • A+
所属分类:轻松一刻
摘要

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

文章目录[隐藏]

  • 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://www.ytso.com/294952.html

  • 我的微信公众号
  • 扫一扫关注
  • weinxin
  • 我的新浪微博号
  • 扫一扫关注
  • weinxin
小辉博客

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: