2021-09-10 cookie、session、token 雨点打透心脏的1/2处 2022-09-11 01:23 130阅读 0赞 11.11 http无状态的 -------------------- ## cookie ## 在浏览器保存一下数据,每次请求的时候都会带过来; 大小限制**4K**,有session的ID; 保存到**客户端**,**不安全**; ![在这里插入图片描述][watermark_type_ZHJvaWRzYW5zZmFsbGJhY2s_shadow_50_text_Q1NETiBAc2hhbmdyaWxhLXhpdQ_size_16_color_FFFFFF_t_70_g_se_x_16] -------------------- ## session ## 因为cookie的不安全,session应运而生; 保存数据的,保存在**服务端**; 大小**无限**; 基于cookie,不是单独存在的; cookie中会有一个sessionid,服务器利用 `sessionid` 找到session文件、读写、写入 ; 隐患: session\_id劫持 -------------------- 下载安装 npm i express express-static cookie-parser cookie-session -------------------- 以下的代码自动加上 const express = require('express') var server = express() server.listen(8989) ### cookie使用【不建议使用这个,不建议去加密cookie】 ### 空间小—节省 安全性差 1、精打细算 2、校验是否被篡改 cookie-parser 签名 cookie-encrypter对cookie加密加密 #### 发送cookie #### //cookie server.use('/',function (req,res) { //path是在什么路径下有效 //maxAge有效期 res.cookie('user','xxxx',{ path:'/aaa',maxAge:30*24*3600*1000})//设置cookie res.send('ok') }) #### 读取cookie #### cookie-parser var secretStr='whhhhsnsmjsjsd' //读取cookie server.use(cookieParser(secretStr)) server.use('/',function (req,res) { //给cookie加密 req.secret=secretStr;//签名密钥,不能加密,但是防篡改 res.cookie('user','xxxx',{ signed:true});//signed需要签名 // s%3Axxxx.V8iQe9VjTgKlfaXJio3pl5D3knxVWuN1%2F06gosSPXBE console.log(req.cookies);//无签名的 //可以用decodeURIComponent解析,可以看到,如果修改后可以知道 // console.log(decodeURIComponent('s%3Axxxx.V8iQe9VjTgKlfaXJio3pl5D3knxVWuN1%2F06gosSPXBE'));//s:xxxx.V8iQe9VjTgKlfaXJio3pl5D3knxVWuN1/06gosSPXBE console.log(req.signedCookies)//所有签过名的 res.send('ok') }) #### 删除cookie #### res.clearCookie(名字) -------------------- ### session使用 ### cookie-session //注意这里的代码是会报错的 const express = require('express') const cookieParser = require('cookie-parser') const cookieSession = require('cookie-session') var server = express() server.listen(8989) //session server.use(cookieParser()) server.use(cookieSession()) server.use('/',function (req,res) { console.log(req.session); res.send('ok') }) 报错如下 ![Error: .keys required.][Error_ .keys required.] //session server.use(cookieParser()) server.use(cookieSession({ keys:['aaa','vvv','desssss'] })) server.use('/',function (req,res) { console.log(req.session);//{} res.send('ok') }) 改良后如下: //session server.use(cookieParser()) server.use(cookieSession({ keys:['aaa','vvv','desssss'] })) server.use('/',function (req,res) { if(req.session['count']==null){ req.session['count']=1 }else{ req.session['count']++ } console.log(req.session['count']); res.send('ok') }) express:sess.sig每次刷新页面都会改变 express:sess每次刷新页面都会改变 ![在这里插入图片描述][b714efa6b4a44c4f9250f2ae8ec512d9.png] //session server.use(cookieParser()) server.use(cookieSession({ name:'ssess', keys:['aaa','vvv','desssss'], maxAge:2*3600*1000,//长时间未操作,时间越短月安全,占用时间越长,服务的压力越大 })) //... }) keys可以优化为 var arr = []; for(var i=0;10000000,i++){ arr.push('sig_'+mMath.random()); } //--------省略部分代码块 keys:arr -------------------- #### 删除session #### delete req.session ## token ## -------------------- 总结: cookie—存在浏览器【客户端】,4K,不安全,可签名【防篡改】、可加密 const express = require('express') const cookieParser = require('cookie-parser') var server = express() server.listen(8989) //cookie var secretStr='whhhhsnsmjsjsd' //读取cookie server.use(cookieParser(secretStr)) server.use('/',function (req,res) { //给cookie加密 req.secret=secretStr;//签名密钥,不能加密,但是防篡改,*这句可不用* res.cookie('名字','值',{ path:'/',maxAge:2,signed:true});//signed需要签名 // s%3Axxxx.V8iQe9VjTgKlfaXJio3pl5D3knxVWuN1%2F06gosSPXBE console.log(req.cookies);//无签名的 //可以用decodeURIComponent解析,可以看到,如果修改后可以知道 // console.log(decodeURIComponent('s%3Axxxx.V8iQe9VjTgKlfaXJio3pl5D3knxVWuN1%2F06gosSPXBE'));//s:xxxx.V8iQe9VjTgKlfaXJio3pl5D3knxVWuN1/06gosSPXBE console.log(req.signedCookies)//所有签过名的 //删除cookie res.clearCookie('名字') res.send('ok') }) session—存在服务器,安全,无限大,不能独立存在【基于cookie】 参考 [详解cookie、session、token关于前后端的那些事(强烈推荐)][cookie_session_token] [watermark_type_ZHJvaWRzYW5zZmFsbGJhY2s_shadow_50_text_Q1NETiBAc2hhbmdyaWxhLXhpdQ_size_16_color_FFFFFF_t_70_g_se_x_16]: /images/20220829/a67da8aaf0de4fbcaa0043524865bd78.png [Error_ .keys required.]: /images/20220829/307d1eac3c6144faaf66b9f554cfdaf7.png [b714efa6b4a44c4f9250f2ae8ec512d9.png]: /images/20220829/b30300dabd814618bdf3ea558c9c273f.png [cookie_session_token]: https://www.cnblogs.com/jianghaijun4031/p/13231831.html
相关 【AI简报20210910期】联想发布LA2智能嵌入式控制器、单目摄像头实时感知车辆形状... ![8ad3e8686b807afe62a22bdca0337ca3.png][] 嵌入式 AI 1. 历时三年量产列装:联想发布LA2智能嵌入式控制器 > 原 阳光穿透心脏的1/2处/ 2022年09月11日 02:23/ 0 赞/ 100 阅读
相关 【20210910】【机器/深度学习】lightGBM模型训练中报错:“Cannot set reference after freed raw data“ 一、原因在于: lightGBM模型训练完之后,Dataset的数据就会被清空,虽然在变量中它还存在,但实际已经被清空了,所以要再使用的话,需要重新生成! ![wate 痛定思痛。/ 2022年09月11日 02:14/ 0 赞/ 6 阅读
相关 【20210910】【信号处理】补偿FIR滤波器时延 一、FIR滤波器时延 = 滤波器阶数 / 采样频率(单位:s) (参考:[补偿 FIR 滤波器引入的延迟][FIR]) 二、仿真代码 fs = 1000; 怼烎@/ 2022年09月11日 02:14/ 0 赞/ 223 阅读
相关 【20210910】【Matlab】load .mat 数据之后将变量重命名 一、背景 在使用 Matlab 过程中,需要读取 .mat 数据使用,使用 load 命令之后赋给一个变量,发现并不是把 mat 数据的内容赋给这个变量,而是赋值了一个结 不念不忘少年蓝@/ 2022年09月11日 01:26/ 0 赞/ 131 阅读
还没有评论,来说两句吧...