express-session(学习笔记)

本文探讨了HTTP会话管理中的session和cookie机制。session存储在服务器端,提供更高的安全性,而cookie则存储在客户端,易受攻击。文章通过示例展示了如何在Express中设置和使用session,并强调了数据加密和安全设置的重要性,如设置cookie的路径、域、最大存活时间和httpOnly属性。
摘要由CSDN通过智能技术生成

session

cookie:

优点:
1.存储在客户端,不占用服务器资源

缺点

1.只能是字符串格式
2.存储量有限
3.数据容易被获取
4.数据容易被篡改
5.容易丢失

session
存储位置:存储在服务器端
优点

1. 可以是任何格式
2. 存储量理论上是无限的
3. 数据难以被获取
4. 数据难以篡改
5. 不易丢失

缺点

		1.占用服务器资源

session原理示意图:
在这里插入图片描述

session使用

const session = require('express-session');
app.use(session({
    secret: 'wanxinlun',
    name: 'sessionis'
}))

在登陆的时候应用session:

router.post("/", asyncHandler(async (req, res) => {
    const reslut = await admainService.loginId(req.body.loginId, req.body.loginPwd);
    if (reslut) {
        let value = reslut.id
        value = cryptor.encrypt(value.toString());//加密
        console.log(req.session);
        req.session.loginUser = reslut;
        res.cookie('token', value, {
            path: "/",
            domain: "localhost",
            maxAge: 7 * 24 * 3600 * 1000,//毫秒数
            httpOnly: true,
        });
        res.header('authorization', value)
        // res.header("set-cookie", `token=${reslut.id};path=/;domain=localhost;max-age=3600`)
    }
    return reslut;

}))

登录操作控制台输出的结果:
在这里插入图片描述
点击修改学生的操作:

//用于解析token
module.exports = (req, res, next) => {

    const apis = needTokenApis.filter(api => {
        const reg = pathToRegexp(api.path);
        if (api.method === req.method && reg.test(req.path)) {
            return true;
        }
        return false;
    })
    console.log(apis);
    if (apis.length === 0) {//不需要认证
        next();
        return;
    }
    let token = req.cookies.token;
    if (!token) {
        //从header的authorization中获取
        token = req.headers.authorization
    }
    if (!token) {
        //没有认证过
        handleNoToken(req, res, next);
        console.log('认证不通过');
        return;
    }
    const userid = cryptor.decrypt(token);//拿到token进行解密
    req.userid = userid;
    //验证token
    console.log(req.session);
    console.log('认证通过', userid);
    next();
}

输出结果:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值