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 相关文章推荐
Win9x/ME下Apache+PHP安装配置
Oct 09 PHP
php str_pad() 将字符串填充成指定长度的字符串
Feb 23 PHP
让PHP更快的提供文件下载的代码
Jun 13 PHP
PHP5函数小全(分享)
Jun 06 PHP
浅析ThinkPHP中的pathinfo模式和URL重写
Jan 06 PHP
Smarty模板学习笔记之Smarty简介
May 20 PHP
根据key删除数组中指定的元素实现方法
Mar 02 PHP
php对xml文件的增删改查操作实现方法分析
May 19 PHP
PHP检查网站是否宕机的方法示例
Jul 24 PHP
彻底搞懂PHP 变量结构体
Oct 11 PHP
Laravel 自定命令以及生成文件的例子
Oct 23 PHP
PHP手机号码及邮箱正则表达式实例解析
Jul 11 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中MVC模式的模板引擎开发经验分享
2011/03/23 PHP
php中使用array_filter()函数过滤空数组的实现代码
2014/08/19 PHP
ThinkPHP查询返回简单字段数组的方法
2014/08/25 PHP
PHP curl模拟登录带验证码的网站
2015/11/30 PHP
Laravel等框架模型关联的可用性浅析
2019/12/15 PHP
javascript下IE与FF兼容函数收集
2008/09/17 Javascript
元素的内联事件处理函数的特殊作用域在各浏览器中存在差异
2011/01/12 Javascript
JQuery模板插件 jquery.tmpl 动态ajax扩展
2011/11/10 Javascript
javascript实现图像循环明暗变化的方法
2015/02/25 Javascript
js实现仿QQ秀换装效果的方法
2015/03/04 Javascript
15款最好的Bootstrap在线编辑器
2016/08/03 Javascript
javascript简易画板开发
2020/04/12 Javascript
jQuery实现Table表格隔行变色及高亮显示当前选择行效果示例
2017/02/14 Javascript
ES6学习笔记之正则表达式和字符串正则方法分析
2017/04/25 Javascript
详解react服务端渲染(同构)的方法
2017/09/21 Javascript
禁止弹窗中蒙层底部页面跟随滚动的几种方法
2017/12/07 Javascript
nodejs用gulp管理前端文件方法
2018/06/24 NodeJs
electron实现qq快捷登录的方法示例
2018/10/22 Javascript
JS判断数组里是否有重复元素的方法小结
2019/05/21 Javascript
让 python 命令行也可以自动补全
2014/11/30 Python
编写Python的web框架中的Model的教程
2015/04/29 Python
Python中类型检查的详细介绍
2017/02/13 Python
Python中str.format()详解
2017/03/12 Python
python pandas库中DataFrame对行和列的操作实例讲解
2018/06/09 Python
python redis 删除key脚本的实例
2019/02/19 Python
使用pytorch实现论文中的unet网络
2020/06/24 Python
利用Python实现最小二乘法与梯度下降算法
2021/02/21 Python
HTML5 播放 RTSP 视频的实例代码
2019/07/29 HTML / CSS
英国最大的婴儿监视器网上商店:Baby Monitors Direct
2018/04/24 全球购物
如何使用PHP session
2015/04/21 面试题
安全在我心中演讲稿
2014/09/01 职场文书
写好Python代码的几条重要技巧
2021/05/21 Python
如何利用pygame实现打飞机小游戏
2021/05/30 Python
Python机器学习之决策树和随机森林
2021/07/15 Javascript
厉害!这是Redis可视化工具最全的横向评测
2021/07/15 Redis
Python中非常使用的6种基本变量的操作与技巧
2022/03/22 Python