Cookie-Session擦出的火花
cookie-session的整个运作过程,利用这个方法来做身份登入验证操作
Session的作用:记录一系列状态
Session原理:HTTP是一种没有状态的协议,当你访问同一个网站的购物车时,它也就不知道是谁访问,读取不出来信息,所以必须有某种机制来识别具体的用户,这个机制就是Session。
完整流程:客户端用户名跟密码请求登入;服务端收到请求去数据库验证;验证成功后,服务端种一个cookieh或发一个字符到客户端,同时服务器保留一份Session;客户端收到响应以后可以把收到的字符存到cookie里;客户端每次向服务端请求资源cookie会自动携带;服务端收到请求,然后去验证cookie和session,如果验证成功,就向客户端返回请求的数据。
Session存储位置:服务器内存,磁盘,或者数据库里
Session跟cookie的区别:在于Session是记录在服务端的,cookie是记录在客户端。
通过代码演示验证登入的整个流程:
准备工作:
1、下载安装:
Npm i cookie-session –S
2、引入cookie-session模块
let cookieSession = require("cookie-session")
3、开启服务
// 引入express模块
let express = require("express")
//搭建服务器
let app = express()
//静态资源托管
app.use(express.static("./public"))
//监听端口
app.listen(3000)
4、使用中间件cookieSession
app.use(cookieSession({
name:"mycookie", //后端给前端种cookie的名字叫做mycookie
keys:["aa","bb","cc"], //加密层级
maxAge:1000*30 //cookie的失效时间
}))
5、验证用户身份,种cookie,存session
// 模拟数据库对比成功
app.get("/api/login",(req,res)=>{
//1)校验客户端传递来的用户名与密码和数据库里面的是否一致
//2)给客户端种cookie,并且同时服务端留一份session
req.session.content = "userId"
//3)后端种完cookie后,就可以给前端返回数据
res.send({
err:0,
msg:"恭喜您,登录成功了!",
data:{
username:"张三"
}
})
})
6、自动登入功能
// 打开另一个页面,去验证cookie和session里面的内容
app.get("/api/user",(req,res)=>{
//读cookie对比session
//如果前端传递来的cookie是有效的,那么req.session.content的值就是“userId"
//如果前端传递来的cookie失效了,那么req.session.content的值就是undefined
let pass = req.session.content //如果用户登录了,那么pass="userId",如果用户cookie失效或者没有,那么返回null
if(pass){
//说明用户身份一直存在的,取库数据,并且返回
res.send({
erro:0,
data:"/api/user的数据!!!"
})
}else{
res.send({
err:1,
data:"用户未登录...或者登录过期了.."
})
}
res.end()
})
7、注销登入
// 直接将存储的serssion设置成undefined
app.get("/api/logout",(req,res)=>{
//删除服务端session和客户端的cookie
req.session.content = undefined
res.end()
})
以上就是session结合cookie做身份验证的整个流程。