express:
1.数据
2.中间件
http-无状态的
cookie、session
cookie:在浏览器保存一些数据,每次请求都会带过来
*不安全、有限(4K)
session:保存数据,保存在服务端
*安全、无限
session:基于cookie实现的
*cookie中会有一个session的ID,服务器利用sessionid找到session文件、读取、写入
隐患:session劫持
cookie
1.读取——cookie-parser
2.发送——
session
cookie-session
cookie:
1.cookie空间非常小——省着用
2.安全性非常差
1.精打细算
2.校验cookie是否被篡改过
a.发送cookie
res.secret='字符串';
res.cookie(名字, 值, {path: '/', maxAge: 毫秒, signed: true});
b.读取cookie
cookie-parser
server.use(cookieParser('秘钥'));
server.use(function (){
req.cookies 未签名版
req.signedCookies 签名版
});
c.删除cookie
res.clearCookie(名字);
cookie-parser
cookie-encrypter
session:
cookie-session
1.写入
2.读取
session劫持
cookie-session
server.use(cookieParser());
server.use(cookieSession({
keys: [.., .., .., ..]
}));
server.use('/', function (){
req.session
});
delete req.session
1.cookie-存在浏览器,4K,不安全
签名、加密
2.session-存在服务器
不能独立存在,基于cookie
server.use(cookieParser('签名字符串'));
server.use(cookieSession({
}));
server.use(function (req, res){
res.cookie(名字, 值, {signed: true});
res.cookies['user']
res.clearCookie('名字');
res.session['xxx']
delete res.session['xxx'];
});
cookie实例
const express = require('express');
const server = express();
// 读取cookie 中间键
const cookieParser = require('cookie-parser');
// 解析签名的密钥
server.use(cookieParser('wwreke'))
server.use('/aaa',(req, res, next)=>{
// 签名密钥
req.secret='wwreke'
// 设置cookie 是否启用签名
// 签名的好处 禁止人为修改
res.cookie('user','blue',{signed:true,path:'/aaa',maxAge: 24*24*3600*1000})
// 有签过名的
console.log(req.signedCookies)
// 这个是没有签过名的
console.log(req.cookies)
res.send('6666')
next()
})
// 删除cookie
server.use('/aaa', (req, res)=>{
res.clearCookie('user')
res.send('66666')
})
server.listen(8083)
cookie-session
const express = require('express');
const cookieSession = require('cookie-session');
const cookieParser = require('cookie-parser')
const server = express();
// 先解析cookie
server.use(cookieParser())
// 才能用session session 是依赖于cookie存在的
server.use(cookieSession({
name: 'sess', // session的名字
// 设置session 的key
// 是个数组 每一次请求会循环去一个数值进行加密
keys: ['aaaa', 'cccc', 'ddddd'],
maxAge: 2*3600*1000 // 有效时间
}))
server.use('/', (req, res)=> {
if(req.session['count'] == null){
req.session['count'] = 1
} else {
req.session['count']++
}
console.log(req.session['count'])
res.send('66666666')
})
server.listen(8081)
网友评论