软件下载

php验证码功能怎么实现(php验证码实现详解)

软件下载 投稿 2022-06-16 21:06:30 浏览

今天做一个简单的信息收集功能,用到了表单,作为最最基本的防刷机制,验证码还是要有的,虽然不像12306网站那样有那么多人盯着,还是预防万一的。

习惯了框架php框架yii2 ,就用框架自带的验证码来实现吧,之前一直有人说yii的验证码有bug,也顺便验证一下。

php验证码实现详解

图片验证码

验证码用到的action类是 yii\captcha\CaptchaAction

以下列出示例代码

1. controller 代码

class BusinessController extends Controller {

public function actions(){

return [

'captcha' => [

'class' => 'yii\captcha\CaptchaAction',

'minLength' => 4,

'maxLength' => 4

], //还有一些其他的参数,比如图片背景之类的

];

}

public function actionIndex(){

$model = new Contact();

if ($model->load(Yii::$app->request->post()) && $model->validate()) {

$rs = $model->save();

}

return $this->render('index', [

'model' => $model

]);

}

 

}

 

2. model代码:

继承自 yii\db\ActiveRecord

class Contact extends ActiveRecord {

public $verifyCode;

public function rules() {

return [

..........

['verifyCode', 'captcha', 'captchaAction'=>'business/captcha', 'message' => '{attribute}错误']

];

}

}

 

3. view代码:

use yii\bootstrap\ActiveForm;

use yii\captcha\Captcha;

 

<?php $form = ActiveForm::begin(['id' => 'contact-form']); ?>

。。。。。。。

<?= $form->field($model, 'verifyCode')->widget(Captcha::className(), [

'captchaAction'=>'business/captcha',

'imageOptions'=>['id'=>'captchaimg','alt'=>'点击换图','title'=>'点击换图', 'style'=>'cursor:pointer'],

'template' => '<div class="row"><div class="col-lg-3">{image}</div><div class="col-lg-6">{input}</div></div>',

]) ?>

<?php ActiveForm::end(); ?>

 

4. 出现的一点小问题

在调试中发现验证码不正确,每次都是,查看源码的验证过程,

查看 yii\captcha\CaptchaAction

public function validate(),添加调试代码,把变量的值数出来

输出session验证码和用户输入的验证码

echo $input . '||' . $code. ';';

发现每次都是输出两次,第一次是正确的,第二次是错误的,这说明验证了两次,第一次验证成功后,看下面的代码,当验证成功是,$valid为TRUE,然后重新生成了验证码,所以第二次是错误的。

if ($valid || $session[$name] > $this->testLimit && $this->testLimit > 0) {

$this->getVerifyCode(true); //重新生成验证码

}

出问题的代码在controller中如下代码

if ($model->load(Yii::$app->request->post()) && $model->validate()) {

$rs = $model->save();

}

这里的validate()和save()都会验证一次,所以会出错.改正后的代码如下:

if ($model->load(Yii::$app->request->post()) && $rs = $model->save()) {

.......

}

php验证码实现详解

点触验证码

5. 总结

验证码是网络安全最常用的验证措施之一,随着技术的发展,机器识别越来越厉害,最初的图片验证码也升级成了,最常见的类似于手机的滑动解锁拖动式验证码,还有12306点触式验证码等,随着网络安全的 攻防战,以后的验证码肯定也越来越智能,功能虽小但作用很大!

php验证码实现详解

 


php验证码实现详解

「真诚赞赏,手留余香」

求资源网

真诚赞赏,手留余香

使用微信扫描二维码完成支付

继续浏览有关编程的文章
发表评论
留言与评论(共有 0 条评论)
   
验证码:
版权声明

求资源网所发布的一切破解补丁,软件,以及其他分析文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途。
否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。