使用express设置读取cookie
cookie,session
cookie:在浏览器中保存一些数据,服务器每次请求的时候都会带着这些信息
不安全 浏览器中可改 ,大小有限 4k
session:保存数据->保存在服务器端,弥补cookie的不足
安全 ,随便存,服务器多大它多大
session“不能独立存在,基于cookie实现的
cookie中有一个session的ID,服务器以此找到session文件,读取,写入
隐患:session劫持(cookie中的sessionID,cookie是浏览器可更改的,有安全隐患)
const express = require('express');
const cookieParser = require('cookie-parser');
var server = express();
server.listen(8080);
设置cookie
//设置cookie
server.use('/',function(req,res,next){
res.cookie('Hongbin','666',{path:'/',maxAge:1*24*3600*1000});
//响应-设置cookie => user ,value,{什么路径下才设置该cookie,过期时间}
res.send("cookie-hongin is ok");//要加这句,否则服务器一直请求不结束,cookie也不设置
next()
})
读取 使用到cookie-parser
server.use(cookieParser());
server.use('/',function(req,res){
res.cookie('Hongbin','666',{path:'/',maxAge:1*24*3600*1000});
console.log(req.cookies);//{Hongbin:'666'}
res.send("cookie-parse");
})
cookie签名,一种安全措施
cookie签名 不是加密,信息还是能看到,在请求时写一个签名这里是LiuHongbin,然后在响应设置cookie时设置签名为true,这个cookie就被签名了,想要查看所有被签名了的cookie的原始数据在cookir-parser中加入签名(LiuHongbin),然后打印时用req.signedCookies获取签名了的cookie,没签名的cookie用req.cookies获取
server.use(cookieParser('LiuHongbin'));
server.use('/',function(req,res){
//req.secret = 'LiuHongbin';//在cookieParser中设置签名这可以不给{ Hongbin: 's:666666.3us260loAWDL0HSDHhpdPMj16dLo1j9WL+6QjnPh5n0' }
res.cookie('Hongbin','666666',{signed:true});
console.log(req.cookies);//所有没签名的cookie
console.log(req.signedCookies)//所有签名的cookie{Hongbin:'66666'}
res.send('secret');
})
删除cookie
cookie res.clearCookie(名)
cookie加密 使用 cookie-encrypter中间件,一般不常用,机密的信息可以放到cookie-session中
var arr = [];
for (let i = 0; i < 1000; i++) {
arr.push('random_'+Math.random())
}
server.use(cookieParser());
server.use(cookieSession({
//keys:['aaa','bbb','ccc']//提供key来保护cookie,key越多越安全也就越费内存,可以在外面定义一个数组来随机生成key
keys: arr
}));
//给session设置一个属性检查是否有,没有可以视为第一次登录,如果有则针对进行操作
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")
})