基础篇一ajax登录方法返回json_ThinkPHP

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

登录的访法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
// 登录检测
    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提交,则返回响应的信息。


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



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

1
2
3
4
5
6
7
8
9
10
11
// 用户登出
    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信息。

李胜松博客

白俊遥博客
请先登录后发表评论
  • 最新评论
  • 总共1条评论
白俊遥博客

PHP攻城之路:哎呀陌陌嗒

2017-03-27 19:15:37 回复