Express学习笔记(六)—— cookie

  1. 安装:npm install cookie-parse

  2. 导入:

    const cookieParser = require('cookie-parser');
    
  3. 设置中间件

    app.use(cookieParser());
    
  4. 设置cookie

    app.get('/', function(req, res, next) {
        // 基础设置cookie,有效期为一个会话,浏览器关闭即失效
        res.cookie('isLogin',false)
        res.send('respond with a resource');
    });
    
  5. 获取cookie

    app.get('/admin',(req,res,next)=>{
        console.log(req.cookies) // {isLogin: false}
    })
    
  6. 设置cookie的有效期

    app.get('/',(req,res,next)=>{
        // 设置cookie在30s后失效
        res.cookie('isLogin',true,{maxAge:30000})
    })
    

    cookie的设置参数说明

    参数解释
    domain域名
    expires过期时间,在设置的时间点后该cookie会失效,如:expires=Wednesday,09-Nov-99 23:00:00 GMT
    maxAge最大失效时间(ms),多少毫秒后失效
    secure当值为true时,cookiehttp中是无效的,在https中才有效
    path表示在那个路由下可以访问到cookie
    httpOnly是微软对cookie做的扩展,如果在cookie中设置了httpOnly属性,则通过程序(JavaScript脚本、applet等)将无法读取到cookie信息,放在XSS的攻击产生
    signed表示cookie是否加密,true时加密cookie,需要用req.signedCookie获得,被篡改的加密cookie会被服务器拒绝,并且cookie值会重置为他的原始值
  7. 加密cookie和解密cookie

    // 加密
    app.get('/', function(req, res, next) {
    res.cookie('isLogin',true,{signed:true})
    });
    
    // 解密
    app.get('/admin',(req,res,next)=>{
    console.log(req.signedCookies) // [Object: null prototype] { isLogin: 'true' }
    })
    
  8. cookie加密和解密原理

    // 导入node自带的加密模块
    let cryto=require('crypto')
    // 定义加密cookie后存储对象
    let secretCookie={}
    
    // 创建加密函数
    function setSecretCookie(str){
        // 使用的加密算法
        let sf=cryto.createHash('md5')
        // 对字符串str进行加密
        sf.update(str)
        // 加密后的二进制数据以字符串的形式返回
        return sf.digest('hex')
    }
    
    // 定义加密函数
    function getSecretCookie(str){
        return secretCookie[str]
    }
    
    // 加密cookie
    app.get('/', function(req, res, next) {
    res.cookie('islogin',setSecretCookie("true"))
    // 加密后的数据作为键,加密前的数据作为值存入secretCookie对象
    secretCookie[setSecretCookie("true")]='true'
    res.send('登录成功111');
    });
    
    // 解密cookie
    app.get('/admin',function(req,res,next){
    let str=req.cookies.islogin
    res.send(getSecretCookie(str))
    })
    
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值