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 相关文章推荐
生成缩略图
Oct 09 PHP
做个自己站内搜索引擎
Oct 09 PHP
用PHP实现小写金额转换大写金额的代码(精确到分)
Jan 10 PHP
PHP内核探索:变量概述
Jan 30 PHP
destoon实现资讯信息前面调用它所属分类的方法
Jul 15 PHP
跟我学Laravel之路由
Oct 15 PHP
php使用sql server验证连接数据库的方法
Dec 25 PHP
php获取百度收录、百度热词及百度快照的方法
Apr 02 PHP
如何利用http协议发布博客园博文评论
Aug 03 PHP
PHP访问数据库集群的方法小结
Mar 14 PHP
YII动态模型(动态表名)支持分析
Mar 29 PHP
PHP数组中头部和尾部添加元素的方法(array_unshift,array_push)
Apr 10 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冒泡排序、快速排序、快速查找、二维数组去重实例分享
2014/04/24 PHP
thinkPHP下的widget扩展用法实例分析
2015/12/26 PHP
PHP面向对象中new self()与 new static()的区别浅析
2017/08/17 PHP
Laravel框架中VerifyCsrfToken报错问题的解决
2017/08/30 PHP
PHP asXML()函数讲解
2019/02/03 PHP
效率高的Javscript字符串替换函数的benchmark
2008/08/02 Javascript
Javascript面象对象成员、共享成员变量实验
2010/11/19 Javascript
Jquery 数据选择插件Pickerbox使用介绍
2012/08/24 Javascript
Jquery 动态循环输出表格具体方法
2013/11/23 Javascript
javascript实现捕捉键盘上按下的键
2015/05/05 Javascript
快速学习jQuery插件 jquery.validate.js表单验证插件使用方法
2015/12/01 Javascript
一个简单不报错的summernote 图片上传案例
2016/07/11 Javascript
ionic实现滑动的三种方式
2016/08/27 Javascript
详解Angular的双向数据绑定(MV-VM)
2016/12/26 Javascript
js date 格式化
2017/02/15 Javascript
vue2.0项目中使用Ueditor富文本编辑器示例代码
2017/08/14 Javascript
React如何将组件渲染到指定DOM节点详解
2017/09/08 Javascript
react redux入门示例
2018/04/19 Javascript
解决vue中虚拟dom,无法实时更新的问题
2018/09/15 Javascript
nodemon实现Typescript项目热更新的示例代码
2019/11/19 Javascript
微信小程序实现带放大效果的轮播图
2020/05/26 Javascript
Python 自动安装 Rising 杀毒软件
2009/04/24 Python
Python和Ruby中each循环引用变量问题(一个隐秘BUG?)
2014/06/04 Python
Python 正则表达式实现计算器功能
2017/04/29 Python
python3+PyQt5自定义视图详解
2018/04/24 Python
详解Python图像处理库Pillow常用使用方法
2019/09/02 Python
python多进程间通信代码实例
2019/09/30 Python
基于python3 的百度图片下载器的实现代码
2019/11/05 Python
python实现超级马里奥
2020/03/18 Python
Python jieba库分词模式实例用法
2021/01/13 Python
网络编程中设计并发服务器,使用多进程与多线程,请问有什么区别?
2016/03/27 面试题
高中生学习的自我评价
2013/12/14 职场文书
《狐假虎威》教学反思
2014/02/07 职场文书
出生公证委托书
2014/04/03 职场文书
中学生国旗下讲话稿
2014/04/26 职场文书
Java基础-封装和继承
2021/07/02 Java/Android