http协议的无状态性
http协议的无状态性,指的是客户端的每一次http请求都是独立的,连续多个请求之间没有直接的关系,服务器不会主动保留每次http请求的状态
什么是Cookie
cookie是存储在用户浏览器中的一段不超过4kb的字符串,它由一个名字,一个值和其他几个用于控制cookie有效期 安全性 使用范围的可选属性组成
不同域名下的cookie各自独立,每当客户端发起请求时,会自动把当前域名下所有未过期的cookie一同发送到服务器
cookie的极大特性
- 1.自动发送
- 2.域名独立
- 3.过期时限
- 4.4KB限制
cookie不具有安全性
由于cookie时存储在浏览器中的,而且浏览器也提供了读写cookie的api,因此cookie很容易被伪造,不具有安全性,因此不建议服务器将重要的隐私数据,通过cookie的形式发送给浏览器
注意:千万不要使用cookie存储重要且隐私的数据! 比如用户的身份信息,密码等
向session中存数据
当express-session中间件配置成功后,即可通过req.session来访问和使用session对象:
app.post('/api/login',(req,res)=>{
//判断用户提交的登录信息是否正确:
if(req.body.username!=='admin' || req.body.password!=='000000'){
return res.send({status:1,msg:'登录失败'})
}
req.session.user=req.body//将用户的信息,存储到session中
req.session.islogin=true //将用户的登录状态,存储到session中
res.send({status:0 ,msg:'登陆成功'})
})
配置 express-session中间件
express-session 中间件安装成功后,需要通过app.use()来注册session中间件
var session=require('express-session');
//配置session中间件
app.use({
secret:'itstudy',//secret属性的值可以为任意字符串
resave:false //固定写法
saveUninitialized:true //固定写法
})
从session中取数据
可以直接从req.session对象上获取之前存储的数据
//获取用户姓名的接口
app.get('/api/username',(req,res)=>{
//判断用户是否登录
if(!req.session.islogin){
return res.send({status:1.msg:'fail'})
}
res.send({status:0,msg:'success',username:req.session.user.username})
})
清空session
调用 req.session.destroy()函数,即可清空服务器保存的session信息
//退出登录的接口
app.post('/api/logout',(req,res)=>{
//清空当前客户对应的session信息
req.session.destroy();
res.send({
status:0,
msg:'退出登录成功'
})
})