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中的登陆login
Jan 18 PHP
php socket方式提交的post详解
Jul 19 PHP
PHP-CGI进程CPU 100% 与 file_get_contents 函数的关系分析
Aug 15 PHP
PHP数组无限分级数据的层级化处理代码
Dec 29 PHP
php实现简单文件下载的方法
Jan 30 PHP
Laravel 5框架学习之数据库迁移(Migrations)
Apr 08 PHP
基于php的CMS中展示文章类实例分析
Jun 18 PHP
php实现的验证码文件类实例
Jun 18 PHP
laravel 如何实现引入自己的函数或类库
Oct 15 PHP
Laravel实现通过blade模板引擎渲染视图
Oct 25 PHP
解决Laravel5.x的php artisan migrate数据库迁移创建操作报错SQLSTATE[42000]
Apr 06 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异常:Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE  eval()'d code error
2011/05/19 PHP
Laravel 6.2 中添加了可调用容器对象的方法
2019/10/22 PHP
JSChart轻量级图形报表工具(内置函数中文参考)
2010/10/11 Javascript
javascript中比较字符串是否相等的方法
2013/07/23 Javascript
使用jQuery时Form表单元素ID和name命名大忌
2014/03/06 Javascript
jQuery控制Div拖拽效果完整实例分析
2015/04/15 Javascript
jQuery实现的进度条效果
2015/07/15 Javascript
JS将滑动门改为选项卡(需鼠标点击)的实现方法
2015/09/27 Javascript
JS实现的自定义网页拖动类
2015/11/06 Javascript
手机Web APP如何实现分享多平台功能
2016/08/19 Javascript
借助node实战JSONP跨域实例
2017/03/30 Javascript
详解vue的diff算法原理
2018/05/20 Javascript
读懂CommonJS的模块加载
2019/04/19 Javascript
vue的列表交错过渡实现代码示例
2019/05/05 Javascript
JS使用cookie保存用户登录信息操作示例
2019/05/30 Javascript
解决在Vue中使用axios用form表单出现的问题
2019/10/30 Javascript
python实现颜色rgb和hex相互转换的函数
2015/03/19 Python
使用C++扩展Python的功能详解
2018/01/12 Python
示例详解Python3 or Python2 两者之间的差异
2018/08/23 Python
Python高级特性切片(Slice)操作详解
2018/09/27 Python
Python实现的插入排序,冒泡排序,快速排序,选择排序算法示例
2019/05/04 Python
基于多进程中APScheduler重复运行的解决方法
2019/07/22 Python
Python正则表达式如何匹配中文
2020/05/27 Python
Python 分布式缓存之Reids数据类型操作详解
2020/06/24 Python
ROSEFIELD手表荷兰官方网上商店:北欧极简设计女士腕表品牌
2018/01/24 全球购物
京东港澳售:京东直邮港澳台
2018/01/31 全球购物
音乐学个人的自荐书范文
2013/11/26 职场文书
领导干部廉政自律承诺书
2014/05/26 职场文书
汽修专业自荐信
2014/07/07 职场文书
2014年银行员工工作总结
2014/11/12 职场文书
一年级数学下册复习计划
2015/01/17 职场文书
大班上学期个人总结
2015/02/13 职场文书
大学生个人总结范文
2015/02/15 职场文书
结婚老公保证书
2015/02/26 职场文书
go语言中GOPATH GOROOT的作用和设置方式
2021/05/05 Golang
MySQL数据库 安全管理
2022/05/06 MySQL