手机版

cookie在节点中的特定用途

时间:2021-08-30 来源:互联网 编辑:宝哥软件园 浏览:

你为什么需要饼干

我们知道http是一个无状态协议。无状态是什么意思?

我举个小例子来说明一下:比如小明在网上购物的时候,浏览了多个页面,买了一些物品。这些请求在多个连接中完成。没有额外的手段,服务器不知道他买了什么,因为服务器每次都不知道请求的是不是小明,除非小明有标识证明自己是小明。

因此,为了识别用户的身份和跟踪会话,出现了cookie。

什么是饼干

简单地说,cookie是标识符。

严格来说,cookies是存储在客户端的信息,浏览器每次连接时都会提交给服务器,服务器也请求浏览器存储cookies。通过这种方式,服务器可以识别客户端。

具体来说,当浏览器第一次向服务器发出请求时,服务器会生成一个唯一的标识符,并将其发送给客户端浏览器。浏览器会将此唯一标识符存储在Cookie中,然后客户端浏览器会在每次发出请求时将此唯一标识符发送给服务器,服务器会通过此唯一标识符识别用户。

说到这里,打开浏览器,我们先来看看商品。

在上图中,浏览器中存储了一个cookie。他的名字是名字,价值是abc。

普通饼干

光看是不够的。接下来,使用node制作一个普通的cookie。

首先,安装express框架和cookieParser中间件

NPM I express-保存NPM安装cookie-解析器-保存cookie解析器中间件的主要用途如下:

从浏览器解析cookie,并将其放入req.cookies对于签名cookie,签名和取消签名cookie的代码如下:

var express=require(' express ');var cookieParser=require(' cookie-parser ');var app=express();app . use(CookieParser());app.use (function (req,RES){ if(req . URL==='/fav icon . ico '){ return }//设置常规cookie,有效期为20s,客户端脚本无法访问其值res.cookie('name ',' abc ',{ signed: false,maxAge: 20 * 1000,httponly : true });console.log(req.cookies,req.url,req . signed bookies);RES . end(' hello cookie ');})在})app.listen(4000)运行后,打开http://localhost 33604000/

以chrome为例。f12打开浏览器调试工具,您可以在应用程序的cookie中找到您定义的cookie。

req.cookies和req.signedCookies这两个属性是随http请求一起发送的请求头中cookies的解析结果。

req.cookies对应普通cookies,req.signedCookies对应签名cookies。

如果请求中没有cookie,则两个对象都是空的。

签名饼干

签名cookie更适合敏感数据,因为它们可以验证cookie数据的完整性,并有助于防止中间人攻击。

有效的签名cookie放在req.signedCookies对象中。

代码如下:

var express=require(' express ');var cookieParser=require(' cookie-parser ');var app=express();//将密钥设置为sign和unsigned cookies,Express可以判断cookie的内容是否被篡改app.use (cookie解析器('一个很酷的秘密'));使用函数(req,RES) {if (req。URL==='/favicon。ico '){ return }//设置签名cookie,该cookie对1minres有效。cookie ('name ',' EFG ',{signed 3360 true,maxage : 60 * 11)console . log(req . cookies,req.url,req . signed bookies);res.end('签名cookie ');})在})app.listen(4000)运行后,打开http://localhost 33604000/

以chrome为例,f12打开浏览器调试工具,可以在应用程序的cookies中找到自己定义的签名cookies。格式如下:s:EFG . 7 fjd UO2 e 9 lmyby 6 o1fgq 3wkihgb9 v1 CDV WOD8NQ VAO

的左侧。符号是cookie的值,右侧是SHA-1HMAC在服务器上生成的加密哈希值。

如果该签名cookie的值被篡改,服务器上cookie的取消将失败,节点中req.signedCookies输出将为false。如下所示:

如果cookie被完整上传,它将被正确解析:

摘要

您可以在cookie中存储任何类型的文本数据,但通常会话cookie存储在客户端,这样您就可以在服务器端保持完整的用户状态。

会议

基于会话和cookie。它存在于服务器中,比cookie安全,但也存在会话劫持的风险,因此需要一个长得多的密钥数组来增加破解的难度。同时,设置ManagEment的到期时间,减少坏人破解的剩余时间。

节点中的一些中间件是cookie会话

const express=require(' express ');const CookieParser=require(' cookie-parser ');const cookieSession=require(' cookie-session ');var app=express();app . use(CookieParser());//cookieession必须放在cookieParser app . use(cookie session({//session的密钥,防止会话劫持)之后。这个密钥将被回收。密钥越长,数量越多,破解难度越大。key :[' AAA ',' BBB ',' CCC'],//会话到期,不容易太长。Php默认为20分钟maxage: 60 * 60。//您可以更改浏览器cookie名称3360 ' session ' });App。使用('/'、函数(req,RES){//假设使用计数器记录用户访问次数if (req。会话['count']==null) {req。会话['计数']=1;} else { req . session[' count '];} console . log(req . session[' count '])RES . send(' ok ')})app . listen(8080)//delete delete req . session从浏览器中可以看到,服务器通过set-cookie in response返回cookie

Session是返回的cookie ID,session.sig是会话签名,用来知道会话是否被修改过。

以上就是本文的全部内容。希望对大家的学习有帮助,支持我们。

版权声明:cookie在节点中的特定用途是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。