图片验证码 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 协议》,转载必须注明作者和本文链接
推荐文章: