<img>标签src缓存问题

本文讲述了在开发项目时遇到的登录验证码验证失败的问题。问题源于前端使用<img>标签加载验证码,当请求路径不变时,浏览器会从缓存中获取图片,导致刷新验证码实际上并未重新请求后端接口,进而使得输入的验证码与session中存储的验证码不符,登录失败。解决方案是通过生成不重复的随机数或使用时间戳确保每次请求的src不同,从而避免缓存影响,成功解决登录验证问题。
摘要由CSDN通过智能技术生成

        最近做项目,登录实现验证码时,总是会出现验证码检验失败,起初以为是输入的时候偶尔输错了也没有在意,后来发现经常出现输入五六次验证码都登录失败,在领导的强烈投诉下,决定好好检查下...

  • 前端代码如下
<Col span="10" style="height: 38px;">
    <img :src="codeImg" @click="refreshImage" height="38" width="112" style="cursor: pointer;"/>
</Col>


data () {
    return {
        codeImg: '/randCodeImage'
        ...
    }
}

methods: {
    refreshImage () {
        let num = Math.ceil(Math.random() * 10) // 生成一个随机数(防止缓存)
        this.codeImg = '/randCodeImage?' + num
        this.form.identifyCode = '' //输入验证码框
    }
}
  •  检查

        其中src指向后端的接口;通过打印num的值,我发现当num出现重复的时候就不会往后台接口跳转。于是我好像发现了什么不得了的事情....

  • 解决

        通过了解浏览器的缓存知识发现:

        <img>标签的src中请求路径如果不变的话,浏览器会认为是同一张图片,不会重新发送请求,转而从缓存中读取验证码,虽然也实现了验证码的刷新,但是代码中登录验证的逻辑是生成验证后存入session中,登录方法中把输入的验证码与缓存中的验证码进行对比判断,由于缓存,刷新的验证码没有走后台生成,在session中找不到对应的验证码所以出现登录验证码验证失败。

        所以将refreshImage方法改造一下,将生成一个随机数改为生成一个不重复的随机数,保持img的src始终不同,或者把随机数改成时间戳,问题迎刃而解。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值