展开全部
我用的方法是判断$_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;
}
}
}
希望对你有帮助