tp5.1前后端分离的情况下调用验证码功能

由于tp5.1的验证码功能是基于session的,在前后端完全分离的情况下,如果状态保持的方式又是以token方式,那么用起来就不是太方便了。所以我改装了一下tp5.1的验证码功能模块,通过cache的方式实现前后端分离的情况下,对验证码进行验证。
但是这种改装也有其弊端与考虑不周的情况,目前可预见的一个弊端是:在高并发的情况下,验证码不一致也有几率验证通过。

详细改装步骤如下:
captcha类的entry函数:

// 保存验证码
$key                   = $this->authcode($this->seKey);
$code                  = $this->authcode(strtoupper(implode('', $code)));
$secode                = [];
$secode['verify_code'] = $code; // 把校验码保存到session
$secode['verify_time'] = time(); // 验证码创建时间
Session::set($key . $id, $secode, '');

//把验证码也保存到缓存中,只有这句是我扩展的,上下都是这个类库原本的代码
Cache::set($code, 1, $this->expire);

ob_start();
// 输出图像
imagepng($this->im);
$content = ob_get_clean();
imagedestroy($this->im);

captcha类中自定义checkByCache函数:

/**
 * 验证验证码是否正确
 * @access public
 * @param string $code 用户验证码
 * @return bool 用户验证码是否正确
 */
public function checkByCache($code)
{
    $key = $this->authcode(strtoupper($code));
    // 验证码不能为空
    $secode = Cache::get($key);
    if (empty($code) || empty($secode)) {
        Cache::set($key,'');
        return false;
    }

    Cache::set($key,'');
    return true;
}

调用示例:

//校验验证码
$captcha = new Captcha;
if(!$captcha->checkByCache($data['verify_code'])) {
    return json(['code'=>-1,'msg'=>'无效验证码']);
}
  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值