在解释cookie和session之前我们先说一下http
http-无状态,无法保存信息(其中包含用户的登陆信息等)
平常我们在网页上登陆自己的账号会有记住密码这一选项,一段内我们在自己的电脑打开同一个网页将默认登陆自己之前的账号,就像前面所说的这种效果是http所不能实现的,这也就是为啥我们要引入cookie和session的原因啦 。
简介
cookie:
在浏览器保存一些数据,每次将服务器请求都回带过来
不安全,有限(4k)
session:
保存数据,保存在服务端
安全,可以认为时无限的
基于cookie实现的
cookie中会有一个session的ID,服务器利用sessionID找到session文件,读取,写入
隐患:session劫持(解决方法更换id,session加密)
cookie
在解释cookie之前 先说说怎么在浏览器上看到cookie
f12 查看页面 在Application中 左框有一个Cookies,就在这里
编写好代码后 启动服务器在浏览器输入http://localhost:8080
查看。
const express=require('express');
const cookieparser=require('cookie-parser'); //中间件
var server=express();
server.use(cookieparser());
server.use('/',function(req,res){//
// res.cookie('user',"blue",{path:'/aaa.html',maxAge:30*24*3600*1000}); //有效时间:天 小时 秒 毫秒
// res.send("ok");
console.log(req.cookies); //
res.send("ok");
});
server.listen(8080);
cookie:
1.cookie空间非常小——节省使用
2.安全性非常差
- 校验cookie是否被篡改过
const express=require('express');
const cookieparser=require('cookie-parser');
var server=express();
server.use(cookieparser("sdasd"));
server.use('/',function(req,res){//
req.secret="sdasd";//放在后台
res.cookie('user',"blue",{signed:true}); //签名不能加密,防止值被更改,签过名后占用空间较大
console.log("签名的cookie",req.signedCookies)
console.log("无签名的cookie",req.cookies)
res.send("ok");
});
server.listen(8080);
输出!!!!!
//签名的cookie {}
//无签名的cookie { user: 'blue' }
解析后才会显示
//签名的cookie { user: 'blue' }
//无签名的cookie {}
a:发送cookie
res.secret='字符串'; //签名 可以不用写 ~~
res.cookie(名字,值,{path:'/',maxAge:毫秒,signed:true});
b:读取cookie
cookie-parser
server.use(cookieParser('签名')); //解析签名后的cookie 在这里直接会添加一个res.secret='字符串' ~~
server.use(function(){
req.cookies //未签名的 读取中间的东西
req.signedCookies //签名版
})
c:删除cookie
res.clearCookie('名字'); //eg:res.clearCookie('user');
cookie-session
1.写入
2.读取
server.use(cookieparser('xxx')); //如果cookie加密 要先解析cookie
server.use(cookieSession({ //这里传入了一个对象
keys:['aaa','bbb','ccc'],//必选密钥组 循环更替使用
name:'lala', //更名
//maxAge: 活动时间
}));
server.use('/',function(){
req.session
});
//删除
delete res.session; //删除的是服务器上面的东西 ??
总的来说:
cookie - 存在浏览器,4k,不安全
签名 加密
session - 存在服务器
不能独立存在 基于cookie 实现