图片验证码 Captcha

1.拉取组件

composer require gregwar/captcha

use Gregwar\Captcha\CaptchaBuilder; 
use Gregwar\Captcha\PhraseBuilder;

2.使用实例

    public static function captcha($key = null)
    {
    $key = $key ?? CAPTCHA_IMG;
    $phrase = new PhraseBuilder;
    // 设置验证码位数
    $code = $phrase->build(4);
    // 生成验证码图片的Builder对象,配置相应属性
    $builder = new CaptchaBuilder($code, $phrase);
    // 设置背景颜色
    $builder->setBackgroundColor(220, 210, 230);
    $builder->setMaxAngle(25);
    $builder->setMaxBehindLines(10);
    $builder->setMaxFrontLines(10);
    // 可以设置图片宽高及字体
    $builder->build($width = 100, $height = 40, $font = null);
    // 获取验证码的内容
    $phrase = $builder->getPhrase();
    // 把内容存入session
    \Log::info($key.'-'.$phrase);
    //        Session::flash($key, $phrase);
    session()->put($key, $phrase);

    $session_val = Session::get($key);
    \Log::info('common中'.$key.'在session中值为'.$session_val);
    // 生成图片
    header('Cache-Control: no-cache, must-revalidate');
    header('Content-Type:image/jpeg');
    $builder->output();
    }

3.路由

Route::get('/getCaptcha/{mun}/{page}', 'RegisterController@getCaptcha');

4.js

<script>
$('#register-form').find('.captcha-img').click(function () {
$(this).attr('src', routeHome + '/getCaptcha' + '/' + Math.random() + '/register');
});
</script>

5.前台

<img class="captcha-img" src="{{url('/getCaptcha/1/register')}}" alt="">

两个点需要解释一下,中间的随机数是因为,浏览器右缓存机制,对于同一url的资源,浏览器会减少请求次数,加一个随机数区别路由。另外验证码存取的时候我用的是session::put()和session::pull();为什么不用session::flash()和session::get()呢,因为项目中,session::flash()出现了高频率存入信息失败的现象,session::pull()是取出并删除,所以能达到同样的效果,并且尚未出现问题。

本作品采用《CC 协议》,转载必须注明作者和本文链接
毛仔
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 2
xingchen

不厚道啊 连个图片都么的

6年前 评论

路由中是getcaptcha,而实例中是captcha,是不是写错了?

5年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!