2012-03-10 103 views
0

到目前爲止,我已經通過編碼我的網站上顯示的登錄頁面(使用GET數據): 網站Q =佔& REQ =登錄重定向在Firefox沒有

如果它們已通過認證,它重定向使用PHP ()他們的帳戶頁面: 網站?q =帳戶

出於某種原因,我想出了一個'該頁面沒有正確重定向'的消息在Firefox,其中Internet Explorer似乎工作...這裏代碼片段:

case 'account': 
    if($req=="login") { 
     if($user->isLoggedIn()) 
      header("Location: /?p=account"); 
     else { 
      if($_SERVER['REQUEST_METHOD'] == 'POST') { 

       $form_data = array('username' => $_POST['username'], 'password' => $_POST['password']); 

       $user->login($form_data); 
       if($user->isLoggedIn()) { 
        header("Location: /?p=account"); 
       } 
      } 

      $pagearr=array('css' => "login.css", 'content' => "login.php"); 
     } 

    } 
    else { 
     if(!$user->isLoggedIn()) 
      header("Location: /?p=account&req=login"); 
    } 
break; 

而下面是我的User類的一個片段:

function User() { 
     session_start(); 

     $this->user_id = isset($_SESSION['user_id']) ? $_SESSION['user_id'] : null; 

     if($this->user_id) { 
      $database= new Database; 
      if($database->checkUserSession($this->user_id,session_id())) { 
       $this->logged_in=true; 
      } 
      else { 
       $this->addSessionError('global','Your login session has timed out, you may login by <a href="/syn/?p=account&req=login">clicking here</a>.'); 
       unset($_SESSION['user_id']); 
      } 
     } 
    } 

的成功驗證用戶身份(如果我回到主頁,它顯示了他們登錄),我做了什麼錯?

+0

也許有些東西是在標題設置之前打印的。或..你有沒有設置ob_start()? – 2012-03-10 02:17:04

+2

您遇到的錯誤類型會提示重定向「循環」,其中此頁面將重定向到最終重定向回此頁面的頁面,等等。 – 2012-03-10 02:22:32

+0

在header(「Location(位置)」後面顯式調用'exit()'。 。「);'防止腳本進一步執行。 – 2012-03-10 02:24:50

回答

0

我認爲過度使用header()對於這個場景並不是很好的做法,所以我在同一個GET域中做了'account'和'login',然後檢查用戶是否登錄顯示正確的包括。

case 'account': 
    $pagearr=array('css' => "login.css", 'content' => "login.php"); 

    if($user->isLoggedIn()) 
     $pagearr=array('css' => "account.css", 'content' => "account.php"); 
    else { 
     $pagearr=array('css' => "login.css", 'content' => "login.php"); 

     if($_SERVER['REQUEST_METHOD'] == 'POST') { 

      $form_data = array('username' => $_POST['username'], 'password' => $_POST['password']); 

      if($user->login($form_data)) { 
       $pagearr=array('css' => "account.css", 'content' => "account.php"); 
      } 
     }   
    } 
break; 

感謝您的幫助!