Thinkphp写ajax登录方法返回json_ThinkPHP
2022-06-05PHP
现在我们就来介绍一下如何使用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> 很赞哦! ()
