图片验证码 Captcha
参考:https://learnku.com/articles/20054
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 () 是取出并删除,所以能达到同样的效果,并且尚未出现问题。
————————————————
原文作者:毛仔
转自链接:https://learnku.com/articles/20054
版权声明:著作权归作者所有。商业转载请联系作者获得授权,非商业转载请保留以上作者信息和原文链接。