Node个人学习(四)----后台中的cookie和session
cookie(需要cookie-parser): 在浏览器保存一些数据,每次请求都会带过来
特点:1、空间小
2、安全性差
3、cookie可以在垂直读取,上级目录读取下级目录。
使用:1、使用时精打细算
2、对cookie进行安全保护,至少能校验cookie是否被篡改过
读取与解签名: 签名和没有签名过的cookie需要通过不同的方法读取。
//导入读取模块
const cookieParser=require('cookie-parser');
//执行中间件,在cookieParser中输入签名密钥进行解签名 server.use(cookieParser('sadsadwdewef'));
//使用req.cookies获取cookie信息 server.use('/aaa/a.html',function(req,res){
res.send('这里面只有签名过的cookie: ',req.signedCookies) res.send('这里面只有没有签名过的coolie:',req.cookies); })
发送cookie:使用res.cookie直接设置cookie。
server.use('/',function(req,res){ //对cookie的设置必须放在send()之前,否则会报错! res.cookie('user1','xiao1',{path:'/aaa',maxAge:7*24*3600*1000}); res.send('ok!'); res.end(); });
删除cookie:
res.clearCookie(名字);
加密:使用签名来防止cookie被修改
缺点:1、cookie值依然能被看到。
2、读取签名过的cookie必须进行解签。
3、增加cookie大小,浪费空间。
//自定义字符串来创建密钥。
req.secret='xuaiooasu65hg66';
//使用signed来确认对信息进行签名。 res.cookie('user1','xiao1',{signed:true});
session(需要cookie-session):保存数据,保存在服务端---------------------------*安全、无限(服务器空间)
session是基于cookie实现的,当用户访问时服务器会给予用户一个默认名为session的cookie,在后续的访问中服务器会利用这个cookie找到session文件,进行读取、写入操作。
隐患:session劫持
在cookie中,除了session外,还有一个名为session.sig的cookie存在,它是session的签名,用来保护session不被篡改。
属性:session中可以自主设置的session属性
server.use(cookieSession({ //手动设置session名 name:'sess', //手动设置session密钥 keys:['aaa','bbb','ccc'], //手动设置session过期时间,单位为毫秒 maxAge:30*60*1000 }));
读取:
//导入需要模块 const cookieSession=require('cookie-session'); //使用中间件在req中添加session属性 server.use(cookieSession()); server.use('/',function(req,res){ //输出session数据 console.log(req.session); })
加密:使用keys数组来加密session,数组中密钥循环使用,加大破解难度
server.use(cookieSession({ keys:['aaa','bbb','ccc'] }));
删除:delete req.session