ThinkPHP 3.2.3的登陆及注销(小白版)

浏览:10322 发布日期:2015/09/09 分类:技术分享 关键字: 登陆 注销
不得不说,这是个超简单的操作,但对于不是很了解框架结构的小白(比如我),还是要郁闷很久的
首先,方法论基本都知道,不就是对session(请允许我忽略cookie)的操作么?问题是那些细节问题。
1_改版后3.1之前的教程基本阵亡,session的存取简单了:
存:session('username',$username);取:session('username');2_检查是否设置了某些session:session('?username')---------------------------以下是正文---------------------------

首先是form表单的提交,
login.html:<form action="" method="post">
    <input type="text"  name="account" class="input" value="" id="loginUsername"  placeholder="用户名">
    <input type="password" name="passwd" class="input erro" value=""   id="loginPwd" placeholder="密码">
</form>
action为空就是提交到本页面或默认页面,此处为本页面
UserController.class.php:<? php
namespace Home\Controller;
use User\Api\UserApi;//有关注册登录验证的模块,此处不予展示了
class UserController extends HomeController {

    public function index(){
        
    }
...
...
/* 登录页面 */
    public function login($username = '', $password = '', $verify = ''){
        if(IS_POST){ //登录验证
            
            /* 调用UC登录接口登录 */
            $username = I('post.account');
            $password = I('post.passwd');
            $user = new UserApi;
            $uid = $user->login($username, $password);//获取数据库中保存的用户ID
            
            if(0 < $uid){ //UC登录成功
                /* 登录用户 */
                $Member = D('Member');
                if($Member->login($uid)){ //登录用户
                                        //将用户名存入session
                    session('username',$username);
                    //TODO:跳转到登录前页面
                    $this->success('登录成功!',U('/Index/index'));
                } else {
                    $this->error($Member->getError());
                }

            } else { //登录失败
                switch($uid) {
                    case -1: $error = '用户不存在或被禁用!'; break; //系统级别禁用
                    case -2: $error = '密码错误!'; break;
                    default: $error = '未知错误!'; break; // 0-接口参数错误(调试阶段使用)
                }
                $this->error($error);
            }

        } else { //显示登录表单
            $this->display();
        }
    }
...
...
分析:当点击登陆时,会调用login(),检测是否接收到了表单提交的数据(上面的action为空就是提交到这儿了),因为还未提交表单,故False,执行$this->display();显示登录界面;
当提交表单后,又一次执行login(),检测到数据,调用I()取值,然后判断是否存在此用户及密码是否正确,如果都正确将用户名存入session

然后就跳转到首页:<include file="Public/n_head"/>
<body>
...
...
首页用了include,导致IndexController.class.php无法直接用$this->assign();赋值,给判断用户是否登录带来了麻烦,所以...
n_head.html:...
...
<php>if (session('?username') != null){</php>
      <div class="htitle_user fl"> <b>{$Think.session.username}</b>  您好,欢迎! <a href="/user/logout">注销</a> </div>
<php>} else {</php>
      <div class="htitle_user fl"> 您好,欢迎!请<a href="/user/login">登录</a><span>或</span><a href="/user/register">免费注册</a> </div>
<php>}</php>
...
...
接着是注销:
UserController.class.php:...
...
    /* 退出登录 */
    public function logout(){
        if(is_login()){
            //D('Member')->logout();
            session('username',null);
            session('[destroy]');
            $this->success('退出成功!', U('/Index/index'));
        } else {
            $this->redirect('/Index/index');
        }
    }
...
...
最佳答案
评论( 相关
后面还有条评论,点击查看>>