thinkphp自带验证码全面解析


Posted in PHP onSeptember 18, 2016

前端页面:

<div style="position:absolute;z-index:3;top:160px;left:180px;">
<img style="cursor:pointer; " src="{:U('Verify')}" onclick="this.src=this.src+'?'+Math.random()" id="safecode" style="height:50px;width:70%;"/>
</div> 
//验证码判断
public function Verify(){
ob_clean();
//显示验证码
$cfg=array(
'codeSet' => '0123456789', // 验证码字符集合
'imageH' => 25, // 验证码图片高度
'imageW' => 80, // 验证码图片宽度
'length' => 4, // 验证码位数
'fontttf' => '4.ttf', // 验证码字体,不设置随机获取
'fontSize' => 10, // 验证码字体大小(px)
'useNoise' => false, // 是否添加杂点
'useCurve' => false, // 是否画混淆曲线
'bg' => array(226,229,236) //背景颜色
);
$very=new \Think\Verify($cfg);
$very->entry();
} 
//客户端通过ajax,实现校验验证码
public function checkVerify(){
$code = I('get.code');
$very = new \Think\Verify();
$key = $this->auth_my_code($very,$very->seKey);
// 验证码不能为空
$secode = session($key);
//对$code进行加密,在比较校验
if($this->auth_my_code($very,strtoupper($code)) == $secode['verify_code']) {
echo json_encode(array('flag'=>1,'cont'=>'验证码正确'));
}else{
echo json_encode(array('flag'=>2,'cont'=>'验证码错误'));
}
}
private function auth_my_code($vry,$str){
$key = substr(md5($vry->seKey), 5, 8);
$str = substr(md5($str), 8, 10);
return md5($key . $str);
}

以上验证码如果输入错误提交后不能自动刷新,对代码进行更改后:

location.href="/Login/Login";这样只能对整个页面刷新,提交表单的值可能会丢失,非常影响用户体验。

2.如果验证码输入错误,提交后自动刷新验证码。

else{
$('#safecode').attr("src","/Login/Verify?"+Math.random());
NewAlert(2,"验证码有误,请重新输入",null);
code_ok = false;
$('#verifyresult').html(msg.cont).css({'color':'red','font-size':'12px'}); 
}

3.以下为ajax提交验证码到后台校验:

<script type="text/javascript">
$("#login_btn").click(function(){
var username = $.trim($("#username").val());
var password = $.trim($("#password").val());
var code = $('#veri').val();
if(username == ""){
NewAlert(2,"请输入用户名",null);
shutdown();
return false;
}else if(password == ""){
NewAlert(2,"请输入密码",null);
shutdown();
return false;
}else if(code==''){
NewAlert(2,"请输入验证码",null);
return false;
}
//ajax去服务器端校验
$.ajax({
url:"__CONTROLLER__/checkVerify",
data:{'code':code},
dataType:'json',
success:function(msg){
if(msg.flag==1){
var data= {
username:username,
password:password
};
$.ajax({
type:"POST",
url:"{:U('Login/Login')}",
data:data,
dataType:"json",
success:function(msg){
if(msg.RespCode=='000'){
shutdown();
if(msg.org_code=='fcb'){
location.href="/Invest/index?biao_type=cwb";
}else{
location.href="{$Think.config.VIP_URL}/Individual/index";
}
}else{
NewAlert(2,msg.RespDesc,null);
return false;
}
},
error:function(){
shutdown();
},
beforeSend: function() {
Loading();
},
});
}else{
$('#safecode').attr("src","/Login/Verify?"+Math.random());
NewAlert(2,"验证码有误,请重新输入",null);
code_ok = false;
$('#verifyresult').html(msg.cont).css({'color':'red','font-size':'12px'}); 
}
}
});
}); 
</script>

以上所述是小编给大家介绍的thinkphp自带验证码全面解析,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

PHP 相关文章推荐
php产生随机数的两种方法实例代码 输出随机IP
Apr 08 PHP
PHP 读取Postgresql中的数组
Apr 14 PHP
解析php file_exists无效的解决办法
Jun 26 PHP
三种php连接access数据库方法
Nov 11 PHP
thinkphp3.2点击刷新生成验证码
Feb 16 PHP
Yii开启片段缓存的方法
Mar 28 PHP
Yii调试查看执行SQL语句的方法
Jul 15 PHP
php禁用cookie后session设置方法分析
Oct 19 PHP
老生常谈ThinkPHP中的行为扩展和插件(推荐)
May 05 PHP
php实现支付宝当面付(扫码支付)功能
May 30 PHP
基于PHP实现生成随机水印图片
Dec 09 PHP
Git命令之分支详解
Mar 02 PHP
php操纵mysqli数据库的实现方法
Sep 18 #PHP
php微信公众账号开发之前五个坑(一)
Sep 18 #PHP
php中实现进程锁与多进程的方法
Sep 18 #PHP
注意!PHP 7中不要做的10件事
Sep 18 #PHP
深入理解PHP类的自动载入机制
Sep 16 #PHP
PHP实现链式操作的原理详解
Sep 16 #PHP
详解PHP中websocket的使用方法
Sep 15 #PHP
You might like
无数据库的详细域名查询程序PHP版(1)
2006/10/09 PHP
浏览器关闭后,能继续执行的php函数(ignore_user_abort)
2012/08/01 PHP
解析php file_exists无效的解决办法
2013/06/26 PHP
Linux下PHP安装mcrypt扩展模块笔记
2014/09/10 PHP
php实现统计网站在线人数的方法
2015/05/12 PHP
PHP数据库操作四:mongodb用法分析
2017/08/16 PHP
thinkphp ajaxfileupload实现异步上传图片的示例
2017/08/28 PHP
php 命名空间(namespace)原理与用法实例小结
2019/11/13 PHP
javascript cookie操作类的实现代码小结附使用方法
2010/06/02 Javascript
12306验证码破解思路分享
2015/03/25 Javascript
AngularJS使用ng-repeat指令实现下拉框
2016/08/23 Javascript
JavaScript利用Date实现简单的倒计时实例
2017/01/12 Javascript
从零学习node.js之详解异步控制工具async(八)
2017/02/27 Javascript
微信小程序利用co处理异步流程的方法教程
2017/05/20 Javascript
Angular利用内容投射向组件输入ngForOf模板的方法
2018/03/05 Javascript
vue axios登录请求拦截器
2018/04/02 Javascript
vue实现购物车功能(商品分类)
2020/04/20 Javascript
Python中使用partial改变方法默认参数实例
2015/04/28 Python
Python 转义字符详细介绍
2017/03/21 Python
使用pandas对两个dataframe进行join的实例
2018/06/08 Python
Opencv+Python 色彩通道拆分及合并的示例
2018/12/08 Python
Python中生成一个指定长度的随机字符串实现示例
2019/11/06 Python
使用Pyhton 分析酒店针孔摄像头
2020/03/04 Python
ffmpeg+Python实现B站MP4格式音频与视频的合并示例代码
2020/10/21 Python
pycharm配置QtDesigner的超详细方法
2021/01/25 Python
html5 浏览器支持 如何让所有的浏览器都支持HTML5标签样式
2012/12/07 HTML / CSS
C语言50道问题
2014/10/23 面试题
中学生社会实践活动总结
2014/07/03 职场文书
ktv好的活动方案
2014/08/17 职场文书
关于远足的感想
2015/08/10 职场文书
2016年母亲节寄语
2015/12/04 职场文书
Python time库的时间时钟处理
2021/05/02 Python
如何在Mac上通过docker配置PHP开发环境
2021/05/29 PHP
mysql5.6主从搭建以及不同步问题详解
2021/12/04 MySQL
《总之就是很可爱》新作短篇动画《总之就是很可爱~制服~》将于2022年夏天播出
2022/04/07 日漫
Python内置类型集合set和frozenset的使用详解
2022/04/26 Python