您现在的位置是:首页 > PHP实例

李清波 2017-05-24 PHP实例 4614 复制当前网址

Thinkphp写ajax登录方法返回json_ThinkPHP

现在我们就来介绍一下如何使用Thinkphp来写登录方法,登录成功后通过ajaxReturn返回json数据。


登录的访法:

// 登录检测
    public function login() {
    	if(IS_POST){
			$ip		=	get_client_ip();
		    $time	=	time();

	        $username	= I('uname');
	        $password	= I('upass');

	        if(check_verify(I('verify_code'))){
	        	$this->ajaxReturn(0,"验证码错误!",0);
	        	$result = array('status'=>0, 'info'=>'验证码错误!');
    			$this->ajaxReturn($result);
	        }

	        $Admin = M('Admin');
	        $authInfo = $Admin->field()->getByUsername($username);
	        if(empty($authInfo)){
	        	$result = array('status'=>0, 'info'=>'改用户不存在!');
    			$this->ajaxReturn($result);
	        }else if($authInfo['password']!=password($password)){
	        	$result = array('status'=>0, 'info'=>'密码错误!');
    			$this->ajaxReturn($result);
	        }else if($authInfo['status']<0){
                $result = array('status'=>0, 'info'=>'该帐号已被禁封,如有问题请联系管理员!');
                $this->ajaxReturn($result);
            }else if($authInfo['status']==0){
                $result = array('status'=>0, 'info'=>'该帐号未激活,如有问题请联系管理员!');
                $this->ajaxReturn($result);
            }

            $_SESSION[C('USER_AUTH_KEY')]   =   $authInfo['id'];
            $admin = array();
            $admin['id'] = $authInfo['id'];
            $admin['roleid'] = $authInfo['role_id'];
            $admin['username'] = $authInfo['username'];
            $admin['nickname'] = $authInfo['nickname'];

            if($authInfo['username']=='admin') {
                $admin['administrator']      =   true;
            }
            session('liqingbo',$admin);

            //保存登录信息
            $Admin  =   M('Admin');
            $data = array();
            $data['id'] =   $authInfo['id'];
            $data['last_login_time']    =   NOW_TIME;
            $data['login_count']    =   array('exp','login_count+1');
            $data['last_login_ip']  =   get_client_ip();
            $Admin->save($data);

            /*$loginData['user_id'] = $authInfo['id'];
            $loginData['login_time'] = NOW_TIME;
            $loginData['login_ip'] = get_client_ip();
            M('LoginLog')->add($loginData);*/

	        $result = array('status'=>1, 'info'=>'正在登陆...', 'url'=>C('APP_PORTAL'));
        	$this->ajaxReturn($result);
    	}

    }


思路分析:首先通过IS_POST来判断是否是POST提交。

1、判断验证码是否正确

2、通过提交过来的用户名获取该用户名的信息

3、通过获取的用户信息和提交过来的密码加密后对比,如果匹配则密码正确,否则密码错误。

4、如果密码错误,且该用户没有被禁用或者有权限的情况下,将该用户信息通过SESSION方式保存到服务器上。

5、更新用户表上的对应用户信息,如登录次数、最后一次登录时间和IP地址。

6、如果是ajax登录,则通过ajax返回响应的json信息,如果是普通post提交,则返回响应的信息。


以上就是一个登录的基本流程思路了。大家也可以根据自己的需求加上自己想要的流程和功能,如有不明白的地方欢迎留言一起讨论。



下面附带登出,也就是退出的操作方法,大家也可以参考一下。

// 用户登出
    public function logout() {
        if(isset($_SESSION[C('USER_AUTH_KEY')])) {
            unset($_SESSION[C('USER_AUTH_KEY')]);
            unset($_SESSION);
            session_destroy();
            $this->success('登出成功!','/admin.php');
        }else {
            $this->error('已经登出!');
        }
    }

思路分析:直接注销登录时所保存的SESSION中的user_id,顺便通过session_destroy()来注销所有session信息。


form代码

<form id="form" action="__URL__/login/login" method="post">
    <div class="loginInfo">
        <ul>
            <li class="row1">登录账号:</li>
            <li class="row2"><input class="input" name="uname" id="uname" size="30" type="text" /></li>
        </ul>
        <ul>
            <li class="row1">登录密码:</li>
            <li class="row2"><input class="input" name="upass" id="upass" size="30" type="password" /></li>
        </ul>
        <ul>
            <li class="row1">验证码:</li>
            <li class="row2"><input class="input" id="verify_code" name="verify_code" type="text" style="width:100px;" /> <img src="/admin.php/login/verify"  title="看不清?单击此处刷新" onclick="this.src+='?rand='+Math.random();"  style="cursor: pointer; vertical-align: middle;"/></li>
        </ul>
    </div>

</form>


加载js

<script type="text/javascript" src="__PUBLIC__/js/jquery-1.9.0.min.js"></script>
<script type="text/javascript" src="__PUBLIC__/js/jquery.form.js"></script>


js

<script type="text/javascript">

//ajax提交
function loginSubmit(){
    $("#op_type").val("1");
    if($("#email").val()==''||$("#pwd").val()==''||$("#verify_code").val()==''){
        popup.alert("填写完整方可登陆");
        return false;
    }
    //commonAjaxSubmit('__APP__/login/login');
    $("#form").ajaxSubmit({
        url:'__APP__/login/login',
        type:"POST",
        success:function(data, st) {
            if(data.status==1){
                popup.success(data.info);
                setTimeout(function(){
                    popup.close("asyncbox_success");
                },2000);
            }else{
                popup.error(data.info);
                setTimeout(function(){
                    popup.close("asyncbox_error");
                },2000);
            }
            if(data.url&&data.url!=''){
                top.window.location.href=data.url;
            }
        }
    });
}
</script>


文章来源:https://www.liqingbo.com/blog-1251.html

评论