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个人网站架设连环讲(二)
Oct 09 PHP
PHP 开发工具
Dec 06 PHP
PHP验证码类代码( 最新修改,完全定制化! )
Dec 02 PHP
php设计模式 Factory(工厂模式)
Jun 26 PHP
php 网上商城促销设计实例代码
Feb 17 PHP
IIS6.0 开启Gzip方法及PHP Gzip函数分享
Jun 08 PHP
smarty内置函数section的用法
Jan 22 PHP
PHP实现过滤各种HTML标签
May 17 PHP
Yii2中SqlDataProvider用法示例
Sep 22 PHP
php基于自定义函数记录log日志方法
Jul 21 PHP
PHP array_shift()用法实例分析
Jan 07 PHP
浅谈php使用curl模拟多线程发送请求
Mar 08 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 mssql 日期出现中文字符的解决方法
2009/03/10 PHP
php google或baidu分页代码
2009/11/26 PHP
ThinkPHP通过AJAX返回JSON的两种实现方法
2014/12/18 PHP
PHP+jquery+ajax实现即时聊天功能实例
2014/12/23 PHP
?牟┛途W扣了一??效果出?? target=
2007/05/27 Javascript
自制轻量级仿jQuery.boxy对话框插件代码
2010/10/26 Javascript
jquery1.83 之前所有与异步列队相关的模块详细介绍
2012/11/13 Javascript
一个可拖拽列宽表格实例演示
2012/11/26 Javascript
jQuery使用post方法提交数据实例
2015/03/25 Javascript
js实现浏览器倒计时跳转页面效果
2016/08/12 Javascript
vuejs 动态添加input框的实例讲解
2018/08/24 Javascript
vue 解决form表单提交但不跳转页面的问题
2019/10/30 Javascript
小程序采集录音并上传到后台
2019/11/22 Javascript
基于js实现判断浏览器类型代码实例
2020/07/17 Javascript
[01:45:05]VGJ.T vs Newbee Supermajor 败者组 BO3 第二场 6.6
2018/06/07 DOTA
[03:02]2020完美世界城市挑战赛(秋季赛)总决赛回顾
2021/03/11 DOTA
python实现将pvr格式转换成pvr.ccz的方法
2015/04/28 Python
python 安装virtualenv和virtualenvwrapper的方法
2017/01/13 Python
python实现微信远程控制电脑
2018/02/22 Python
caffe binaryproto 与 npy相互转换的实例讲解
2018/07/09 Python
Python 隐藏输入密码时屏幕回显的实例
2019/02/19 Python
scrapy-redis源码分析之发送POST请求详解
2019/05/15 Python
python__name__原理及用法详解
2019/11/02 Python
python opencv进行图像拼接
2020/03/27 Python
洛佩桑酒店官方网站:Lopesan Hotels
2019/04/15 全球购物
构造器Constructor是否可被override?
2013/08/06 面试题
Linux内核的同步机制是什么?主要有哪几种内核锁
2016/07/11 面试题
大学生新闻专业个人自我评价
2013/11/12 职场文书
司机岗位职责
2013/11/15 职场文书
安全口号大全
2014/06/21 职场文书
改作风抓落实促发展心得体会
2014/09/10 职场文书
2015年国际护士节演讲稿
2015/03/18 职场文书
《圆的面积》教学反思
2016/02/19 职场文书
MySQL 用 limit 为什么会影响性能
2021/09/15 MySQL
一小时迅速入门Mybatis之bind与多数据源支持 Java API
2021/09/15 Javascript
Vue router配置与使用分析讲解
2022/12/24 Vue.js