ajas php 验证码_thinkPHP3.2.3利用Ajax前台实现验证码验证,但通过form表单的按钮提交后,验证码一直错误!如何解决?...

展开全部

我用的方法是判断$_session里的验证码值是否与post提交的验证码值是否相等,经过测试没有问636f707962616964757a686964616f31333363396432题,代码如下:

前台表单:

/Login/index/" method="post" name="login">

登陆

 请输入用户名和密码 

用户名

密码

验证码

      /verifyShow" οnclick="this.src='/verifyShow/'+Math.random();"/>换一张

登陆

js效果//登录表单验证

var check = {

username: false, //用户名

password: false, //密码

code:     false  //验证码

}

//提示信息

var mesg = '';

$(function () {

var login = $('form[name=login]');

// 登录提交事件

login.submit(function () {

var isOk = check.username && check.password && check.code;

if(isOk){

return true;

}

//点击提交依次触发失去焦点再次验证

$('input[name=username]',login).trigger('blur');

$('input[name=password]',login).trigger('blur');

$('input[name=code]',login).trigger('blur');

return false;

});

//验证码验证码

$('input[name=code]',login).blur(function () {

var code = $(this).val();

var mesgBox = $(".mesgBox span");

//不能为空

if (code == '') {

mesg = '验证码不能为空';

mesgBox.html(mesg);

mesgBox.parent().removeClass('display-hide');

check.code = false;

return;

}

//异步验证验证码

$.post(PATH + '/ajax_code/',{code:code},function (status) {

if(status){

mesg = '';

mesgBox.html(mesg);

mesgBox.parent().addClass('display-hide');

check.code = true;

}else{

mesg = '验证码不正确';

mesgBox.html(mesg);

mesgBox.parent().removeClass('display-hide');

check.code = false;

}

},'json');

});

})

后台控制器:namespace Admin\Controller;

use Think\Controller;

use Think\Verify;

class LoginController extends Controller {

private $verify;

//验证码

public function verifyShow(){

//验证码设置

$config = array(

'useImgBg' => false,            // 使用背景图片

'fontSize' => 16,              // 验证码字体大小(px)

'useCurve' => true,            // 是否画混淆曲线

'useNoise' => false,           // 是否添加杂点

'imageH'   => 45,              // 验证码图片高度

'imageW'   => 110,             // 验证码图片宽度

'length'   => 4,               // 验证码位数

'fontttf'  => '',              // 验证码字体,不设置随机获取

'bg'       => array(243, 251, 254),  // 背景颜色

'reset'    => true,           // 验证成功后是否重置

);

$verify = new Verify($config);

//验证码输出

$verify->entry();

}

public function _initialize(){

$this->verify = new Verify();

}

//后台管理员登录页

public function index(){

if(IS_POST && !empty($_POST)) {

//一、判断验证码是否正确

foreach($_SESSION as $key => $value){

$code =  $value['verify_code']; //session里的验证码值

}

if($this->verify->check($_POST['code']) == $code) { //post提交过来的验证码值 与 session里的验证码值判断

//二、用户民与密码验证

//验证用户名

$userData = new \Model\LoginModel();

//在LoginModel里创建一个checkLogin方法,用于验证用户名与密码

//验证成功,把当前管理员的一条记录信息都返回

//验证失败,返回NULL

$info = $userData->checkLogin($_POST['username'], $_POST['password']);

if($info) {

//session持久化用户信息(id/name),跳转到后台首页

session('admin_id', $info['lid']);

session('admin_name',$info['username']);

$this->redirect('Index/index', '', 1, '正在登陆...');

} else {

$this->redirect('index', '', 1, '用户名或密码错误');

}

} else {

$this->redirect('index', '', 1, '验证码错误');

}

}

$this-> display();

}

//异步验证验证码

public function ajax_code(){

if(!IS_AJAX) $this->redirect('index', '', 1, '页面不存在');

if($this->verify->check(I('post.code'))){

echo 1;

}else{

echo 0;

}

}

}

希望对你有帮助

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值