2013-05-01 91 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"] ?> 

,会告诉你知道你在哪里应该。