为了账号安全,请及时绑定邮箱和手机立即绑定

关于构造函数死循环的问题

经测试,adminController.class.php控制类文件的构造函数会造成初次登录时死循环,你想啊,每次访问domain/admin.php?controller=admin&method=login这个页面,都会执行一次构造函数,而构造函数内部检测不到 $_SESSION['auth']) 这个变量,势必会

执行$this->showmessage('请登录后在操作!', 'admin.php?controller=admin&method=login');

这个函数,所以,不断alert不断跳回登录界面,然后就PHP 程序就GG了。

		public function __construct(){
			session_start();
			if(!(isset($_SESSION['auth']))&&(PC::$method!='login')){
				$this->showmessage('请登录后在操作!', 'admin.php?controller=admin&method=login');
			}else{
				$this->auth = isset($_SESSION['auth'])?$_SESSION['auth']:array();
			}
		}

因为是构造函数,所以应该每次访问admin控制器的时候,都应该其$_SESSION['auth'](或者登录成功时设置$_SESSION['username'])变量是否存在,如果存在则转入相应的方法页面(方法为login则进入index页面),否则允许进入原方法页面(控制器自己执行无需干扰)

所以建议改成如下:

<?php
class adminController
{ 
  public $auth;
  function __construct()
  {
    session_start();
  }
  function login()
  {

    if(!isset($_POST['submit'])&&empty($_SESSION['auth']))
    {  
      VIEW::display('admin/login.html');
    }
    else
    { //POST请求,验证其信息
      $this->checkLogin();
    }
  }
  function checkLogin()
  {
    $authObj = M('auth');
      if($authObj->loginsubmit())//验证登录信息
      { 
        $this->showMsg('登录成功','admin.php?controller=admin&method=index');
      }
      else
      {
        $this->showMsg('账号或密码错误,请重新登录','admin.php?controller=admin&method=login');
      }
    }
    function showMsg($info, $url){

      echo "<script>alert('$info');window.location.href='$url'</script>";
      exit;
    }
    function logout()
    {
      unset($_SESSION['auth']);
      $url = 'http://'.$_SERVER['HTTP_HOST'].'/cmvc/admin.php?controller=admin&method=login';
      header('Location: '.$url); 
    }
    function index(){
      if(isset($_SESSION['auth']))
      {
        $newsobj = M('news');
        $newsnum = $newsobj->count();
        VIEW::assign(array('newsnum'=>$newsnum));
        VIEW::display('admin/index.html');
      }
      else
      {
        echo "会话超时,请重新登录!";
        $url = 'http://'.$_SERVER['HTTP_HOST'].'/cmvc/admin.php?controller=admin&method=login';
        header('Location: '.$url); 
      }
    }
  }

  ?>


正在回答

1 回答

举报

0/150
提交
取消
MVC架构模式分析与设计
  • 参与学习       82395    人
  • 解答问题       929    个

通过学习MVC理论知识,由浅入深带您实现人生第一个MVC框架

进入课程

关于构造函数死循环的问题

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信