标签分类
技术文章
当前位置:主页 > 计算机编程 > php > thinkPHP5框架captcha验证码配置及验证操作示例

thinkPHP5框架captcha验证码配置及验证操作详解

  • 发布时间:
  • 作者:码农之家原创
  • 点击:77

thinkPHP5框架captcha验证码配置及验证操作示例

这篇文章主要知识点是关于tp5,thinkPHP5框架,captcha,验证码,配置,验证,thinkPHP5框架captcha验证码配置及验证操作示例,Laravel5.2使用Captcha生成验证码实现登录(session巨坑) 的内容,如果大家想对相关知识点有系统深入的学习,可以参阅以下电子书

ThinkPHP实战
ThinkPHP实战原书超清版
  • 类型:ThinkPHP大小:28.5 MB格式:PDF出版:清华大学出版社作者:夏磊
立即下载

本文实例讲述了tp5(thinkPHP5框架)captcha验证码配置及验证操作。分享给大家供大家参考,具体如下:

1-安装

composer require topthink/think-captcha 1.* -vvv

2-配置文件

'captcha' => [    // 验证码字符集合3.
  'codeSet' => '2345678abcdefhijkmnpqrstuvwxyzABCDEFGHJKLMNPQRTUVWXY',     // 验证码字体大小(px)5.
  'fontSize' => 28,     // 是否画混淆曲线7.
  'useCurve' => false,     // 验证码图片高度9.
  'imageH'  => 50,    // 验证码图片宽度11.
  'imageW'  => 200,     // 验证码位数13.
  'length'  => 4,     // 验证成功后是否重置    15.
  'reset'  => true
  ],

3-html  代码

<div class="yzm">
  <img src="{:captcha_src()}" class="verify" onclick="resVerify()" alt="验证码" />
<a href="javascript:resVerify();" rel="external nofollow"  >看不清,换一张</a>
</div>

或者

<img src="{:captcha_src()}" class="verify" 
onclick="javascript:this.src='{:captcha_src()}?rand='+Math.random()" >

4-控制器  登录时候的验证

$captcha=input("captcha");
 //验证
if (!captcha_check($captcha)){
  exit(json_encode(array('status'=>0,'msg'=>'验证码错误')));
}

或者

//验证码验证码
$captcha = new Captcha();
if (!$captcha->check(input("captcha"))){
  return $this->error("验证码错误");
}

更多的功能和插件 参考地址:https://www.kancloud.cn/he_he/thinkphp5/787173

Laravel5.2使用Captcha生成验证码实现登录(session巨坑)

最近有朋友要我帮忙弄一下laravel的验证码登陆,所以稍稍研究了一下。(本人都快忘了咋使用laravel了)

首先,安装laravel就不用在下赘述了吧,我的版本是5.2.45(注:laravel5.2.6以上的版本中间件可以自动加载),这还是挺重要的。

安装完成之后,你需要使用composer来加载你的Captcha,具体方法就是在你的composer.json中的require数组中加上"gregwar/captcha":"1.*"这行代码。然后嘞,就在你的项目根目录下使用cmd来运行composer update这行代码。这样一来的话,就算是安装上这个库或者是中间件了。之后就可以放肆的写你的代码了。

php:(具体的路由啥的在下就不做太多的赘述了,只写关键代码)

public function captcha($tmp)
{  //生成验证码图片的Builder对象,配置相应属性
  $builder = new CaptchaBuilder;
  //可以设置图片宽高及字体
  $builder->build($width = 100, $height = 40, $font = null);
  //获取验证码的内容
  $phrase = $builder->getPhrase();
  //把内容存入session
  Session::flash('milkcaptcha', $phrase);
  //生成图片
  header("Cache-Control: no-cache, must-revalidate");
  header('Content-Type: image/jpeg');
  $builder->output();
}

blade模板的调用:

<img src="{{url('/captcha/1')}}" alt="" onclick="this.src='{{url('/captcha')}}/'+Math.random()" width="100" height="40" border="0">

  如果你以为这样就完事了的话,那你真的是too yang too simple了。在你验证的时候你会发现怎么样都是错误。

是不是很酸爽。因为在laravel5.2中,所有的session都是不能跨控制器、方法的,如果跨的话,session会重新生成,默认session的传递需要经过中间件。不要急,接下来的方法就是解决之道。目前本人所知有两种解决方案,其一就是自己建一个中间件,然后把所有的session都存储在其中,但是有点小麻烦,接下来本人介绍一种简单的方法,在你的laravel\app\Http\Kernel.php 文件里的$middleware里加上以下代码:

\Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class,
\Illuminate\Cookie\Middleware\EncryptCookies::class,
\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
\Illuminate\Session\Middleware\StartSession::class,
\Illuminate\View\Middleware\ShareErrorsFromSession::class,

之后就可以放心的使用session了。这是在下的验证验证码的方式,

public function login_data()
{
  $userInput = \Request::get('captcha');
  if (Session::get('milkcaptcha') == $userInput) {
    //用户输入验证码正确,验证你自己密码用户名
    echo 1;
  } else {
    //用户输入验证码错误
    echo 2;
  }
}

最后不得不吐槽一下laravel的官方文档,像这种坑都不提前说明,估计是担心开发者开发的太顺心了吧。

总结

以上所述是小编给大家介绍的Laravel5.2使用Captcha生成验证码实现登录(session巨坑),希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对码农之家网站的支持!

以上就是本次给大家分享的全部知识点内容总结,大家还可以在下方相关文章里找到等php文章进一步学习,感谢大家的阅读和支持。

上一篇:ThinkPHP3.2.3框架执行原生SQL语句的方法代码实例

下一篇:YII框架行为behaviors用法详解

展开 +

收起 -

学习笔记
网友NO.735147

tp5(thinkPHP5)框架数据库Db增删改查常见操作总结

本文实例讲述了tp5(thinkPHP5)框架数据库Db增删改查常见操作。分享给大家供大家参考,具体如下: 添加数据insert $data = [ 'name_cn' = '张三', 'name_en' = 'jack',];$res = Db::name('style')-insert($data); 添加数据。 INSERT INTO `tf_style` (`name_cn` , `name_en`) VALUES ('张三' , 'jack') tp5还可以通过 insertAll 插入多条数据。 $data = [ 'name_cn' = '张三', 'name_en' = 'jack',];$res = Db::name('style')-insertGetId($data); 获取插入的id。 修改数据update 更新数据,使用 update 方法。 $res = Db::name('style')-where('id',4)-update(['name_cn'='李四']);UPDATE `tf_style` SET `name_cn` = '李四' WHERE `id` = 4; 返回结果为影响的行数。 $where = new Where();$where['id'] = ['',2];$res = Db::name('style')-where($where)-update(['name_cn'='李四']); 通过$where对象进行条件操作。 $where[] = ['id','',2];$res = Db::name('style')-where($where)-update(['name_cn'='王五']); 也是可以的。 主键可以直接写入data数据中。 $res = Db::name('style')-update(['name_cn'='王五','id'=2]); 结果如下: UPDATE `tf_style` SET `name_cn` = '王五' WHERE `id` = 2; 这种方式只可以修改一条数据。 只修改一个字段,使用 setField 方法。 $res = Db::name('style')-where('id',2)-setField(['name_cn'='刘备']);$res = Db::name('style')-where('id',2)-setField(['name_cn'='刘备','name_en'='LiuBei']);UPDATE `tf_style` SET `name_cn` = '刘备' , `name_en` = 'LiuBei' WHERE `id` = 2 效果与……

网友NO.964102

thinkphp5实现无限级分类

tp5对分类数据表的信息读取与展示,我们即可以控制器完成,也可以在对应的模型中完成。本案例,我们在模型中完全成。况且,对数据表的增,删改查操作,本来就是模型的本职工作。 首先声明一下,我们采用递归的方式来实现无限分类。但无限分类的实现,不是只是递归一种方式,还有一种是全路径方式,也可以实现,不过,这种方式通常用在全路径导航菜单中。所以,这里我们还是用最常见的递归函数来实现:无限分类。 首先我们先创建一个静态方法:getCate,为什么要静态方式,因为静态方法执行效率高,不需要实例化,而且,分类查询是使用非常频繁的操作,很多查询都要依赖分类查询的结果。 当前的getCate方法,有三个参数: 第一个是$pid,是父类的id,默认为0,表示从顶级开始查起。 第二个参数是返回的查询结果,我们放在一个数组中返回,注意,这个变量是引入方式传入的。 在递归函数中,返回结果有三种方式: 第一种就是大家比较熟悉的,使用全局变量$_GLOBALS[],这个方法有副作用,我们不用它; 第二种方式也不错,是在函数中用static关键字,声明一个静态变量,它可以将每一次的递归执行结果进行累计,最后再返回,非常好理解,但占用资源过多,执行效率低; 第三种,就是采用引用参数的方式,来返……

网友NO.598010

基于ThinkPHP5框架使用QueryList爬取并存入mysql数据库操作示例

本文实例讲述了基于ThinkPHP5框架使用QueryList爬取并存入mysql数据库操作。分享给大家供大家参考,具体如下: QueryList4教程 地址: https://doc.querylist.cc/site/index/doc/45 在ThinkPHP5代码根目录执行composer命令安装QueryList: composer require jaeger/querylist 如果出现 以下错误 Loading composer repositories with package information Updating dependencies (including require-dev) Authentication required (packagist.phpcomposer.com): Username: 出现这样的 情况 使用 composer config -g repo.packagist composer https://packagist.laravel-china.org 下面演示在Index控制器中使用QueryList: use QL\QueryList;public function qulist(){ $data = QueryList::get('http://maoyan.com/board/4') // 设置采集规则 -rules([ // 爬取图片地址 "src"=array(".board-wrapper dd img.board-img","data-src"), // 爬取电影名 "name"=array(".board-wrapper dd .movie-item-info .name","html"), // 爬取电影主演信息 "star"=array(".board-wrapper dd .movie-item-info .star","html"), // 爬取上映时间 "releasetime"=array(".board-wrapper dd .movie-item-info .releasetime","html"), ]) -query()-getData(); $excel_array=$data-all(); var_dump($excel_array);exit;} 如果没有错的 则 如果想继续抓取下一页的数据 要根据规律来去 这里我继续抓取20页 但是没有那么多就抓取了10页的数据 public function qulist(){ for($i=0;$i20;$i++){ $page=$i*10; $data = QueryList::get('http://maoyan.com/board/4?offset……

网友NO.545687

thinkPHP5.0框架验证码及点击图片刷新的方法总结

本文实例讲述了thinkPHP5.0框架验证码调用及点击图片刷新实现方法。分享给大家供大家参考,具体如下: 1、配置文件中增加验证码配置 captcha = [ // 验证码字符集合 codeSet = 23456789, // 验证码字体大小(px) fontSize = 25, // 是否画混淆曲线 useCurve = false, // 验证码位数 length = 4, // 验证成功后是否重置 reset = true], 2、后端验证码方法写入 public function check($code=){ if (!captcha_check($code)) { $this-error(验证码错误); } else { return true; }} 3、前端调用验证码 并设置onclick属性,点击图片刷新验证码 div spanstrong请输入验证码/strong/span input display: inline; class=form-control name=code type=text required=required img src={:captcha_src()} onclick=this.src={:captcha_src()}?+Math.random();//div 希望本文所述对大家基于ThinkPHP框架的PHP程序设计有所帮助。 ……

<
1
>

Copyright 2018-2019 xz577.com 码农之家

版权责任说明