node.js中的session身份验证

本文详细解析了Session的工作原理,包括客户端请求登录、服务端验证、Session与Cookie的交互过程,以及如何使用Express和cookie-session实现自动登录和注销功能。

session的思想
1、客户端用户名跟密码请求登录
2、服务端收到请求,去库验证用户名与密码
3、验证成功后,服务端种一个cookie或发一个字符到客户端,同时服务器保留一份session
4、客户端收到 响应 以后可以把收到的字符存到cookie
5、客户端每次向服务端请求资源的cookie会自动携带
6、服务端收到请求,然后去验证cookie和session,如果验证成功,就向客户端返回请求的库数据

使用

const express = require('express')//导入express第三方模块 他是开启服务器的二次封装
const cookieSession = require('cookie-session')//导入cookie-session中间件
let app = express()//创建一个服务器
app.listen(8000)//监听一个端口号  这里有三个参数 第一个是你要监听的端口号 第二个是你的域名 第三个是callback回调函数  这里我是简写 默认域名为 localhost 

app.use(express.static('你的静态页面文件地址'))//这里是静态托管 如果你访问http://localhost:8000/ 则会直接返回你这个文件地址里面的index.html文件

//使用中间件 cookieSession
app.use(cookieSession({
    name:"mycookie",  //后端给前端种cookie的名字叫做mycookie 默认是 express:sess
    keys:["aa","bb","cc"],  //加密层级  必填的 参照官网的keys写法
    // maxAge:1000*30  //cookie的失效时间 单位是ms
}))

//验证用户登录
app.get('/api/login',(req,res)=>{
    req.session.nz1906 = 'userId'//在设置session的同时给客户端设置cookie
    res.send({
        error:0,
        message:"种植cookie成功..........."
    })
})

//自动登录功能
app.get('/api/user',(req,res)=>{
    //读cookie对比session
    //如果前端传递来的cookie是有效的,那么req.session.nz1906的值就是“userId"
    //如果前端传递来的cookie失效了,那么req.session.nz1906的值就是undefined
    let pass = req.session.nz1906 //如果有数据 则证明直接把数据传递给客户端 如果没有则显示未登录或者过期
    if(pass){
        res.send({
            error:0,
            message:'/api/user的数据' //在这里如果有pass 就返回这个地址的数据给客户端
            
        })
    }else{
        res.send({
            error:1,
            message:"用户未登录或者登陆过期............." //若果没有就返回提示信息给客户端
        })
    }
})


//注销用户
app.get('/api/logout',(req,res)=>{
    req.session.nz1906 = undefined
    //删除服务端session和客户端的cookie
    //让服务端的session值为undefined  再次访问用户的时候cookie值对不上就会显示未登录或者过期
    res.send('你已注销用户')
})
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值