express框架cookie和session

使用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")
})

发布了117 篇原创文章 · 获赞 146 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/printf_hello/article/details/105005015