Cookie-Session擦出的火花

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做身份验证的整个流程。

猜你喜欢

转载自blog.csdn.net/weixin_46392334/article/details/104896273