2013-05-01 119 views
0

我在php中創建了一個基本的登錄腳本。在我的lampp本地主機上重定向工作正常。當我將模板加載到另一臺服務器時,重定向不再工作。誰能告訴我爲什麼這是和如何解決它,這將不勝感激。謝謝重定向停止工作

這裏是admin.php的腳本,它包含一個登錄表單。如果設置了$_SESSION['logged_in'],那麼用戶應該每次都重定向到backend.php頁面。但在服務器上,它每次都會顯示admin.php頁面。但再次當我在我的lampp本地主機上工作正常。

$users = new Users; 

if (isset($_SESSION['logged_in']) === true) { 
    header('Location: backend.php'); 
} else { 
    if (empty($_POST) === false) { 
     $username = $_POST['username']; 
     $password = $_POST['password']; 

     if (empty($username) === true || empty($password) === true) { 
      $errors[] = 'All fields are required!'; 
     } else { 
      $login = $users->login($username, $password); 

      if ($login == 0) { 
       $errors[] = 'Username or password incorrect!'; 
      } else { 
       $_SESSION['logged_in'] = true; 
       header('Location: backend.php'); 
       exit(); 
      } 
     } 
    } 
} 
+3

<?php session_start(); ?>'? – 2013-05-01 05:14:33

+0

你應該在第一個'header()'調用之後'exit()'。 – 2013-05-01 05:18:18

+0

@Burhan Khalid'session_start'位於 – zachstarnes 2013-05-01 05:19:49

回答

1

我認爲文件的其餘部分包含管理頁面的實際HTML?

您是否驗證過if正在進入您期望的分支。通過使用調試器或更原始的如die('This should redirect!');

如果您有,那麼問題很可能是您的輸出發生在您撥打header之前。確保所有錯誤都顯示。它應該給你一個錯誤,告訴問題出在哪裏。

正因爲如此,在頭部重定向調用之後exit()很常見 - 以防止頁面的其他部分無意中運行/顯示。

+0

我現在在兩個頭重定向後都有'exit()'。和錯誤報告,但沒有給我任何東西。它所做的就是當我使它重定向它退出並且屏蔽空白但不去頁面。它只停留在同一個 – zachstarnes 2013-05-01 05:23:40

+0

因此,'if'正在工作,但標題重定向不是。它仍然聽起來像標題調用之前有一些輸出。即使是之前包含的單個空格字符也足以阻止其工作。確保在關閉php標籤('?>')後沒有空格/換行符,並確保error_reporting設置爲E_ALL並且display_errors打開。 – 2013-05-01 05:28:32

+0

在向E_ALL發送錯誤報告後,我不得不將head.php包括在腳本下面,因爲它正在輸出,並且在我完成之後我工作:) – zachstarnes 2013-05-01 05:36:06

0

使用<?php session_start(); ?>開始的代碼。

+0

以上的文件中,該文件位於另一個包含在上述文件中的文件 – zachstarnes 2013-05-01 05:18:22

+0

是'<?php session_start(); ?>在其他文件中的功能? – 2013-05-01 05:19:27

0

您的服務器可能擁有與本地不同的根文件夾。我會嘗試

<?php echo $_SERVER["DOCUMENT_ROOT"]; ?> 

<?php echo $_SERVER["SCRIPT_FILENAME"] ?> 

,會告訴你知道你在哪裏應該。