关于构造函数死循环的问题
经测试,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);
}
}
}
?>