我在两页之间重定向的方式有什么问题?

时间:2011-01-11 00:10:22

标签: php session redirect

再次,非常noob PHP问题。

我有一个非常简单的登录页面

<?php
  session_start();
  if (isset($_SESSION['username']))
  {
    header('Location: main.php');
    exit();
  }
  if (isset($_POST['submit']))
  {
    $user = $_POST['user'];
    $pass = $_POST['pass'];
    if (try_login($user,$pass))
    {
      $_SESSION['username'] = $user;
      header('Location: main.php');
      exit();
    }
  }
?>
<html> <!-- and login form below...  >

还有一个非常简单的主页:

<?php
  session_start();
  if (!isset($_SESSION['username']))
  {
    header('Location: .');
    exit();
  }
?>
<html> <!-- etc, etc -->

我希望发生以下事情:

  1. 如果我在登录前导航到http://localhost/main.php,我应该被重定向到http://localhost/
  2. 如果我导航到http://localhost/并成功登录,我应该被重定向到http://localhost/
  3. 不幸的是,#2没有发生。我的代码有什么问题?

4 个答案:

答案 0 :(得分:3)

您应该使用完全限定的网址:

header('Location: http://localhost/main.php ');

答案 1 :(得分:2)

您必须使用Location: /Location: /main.php等绝对URI。

答案 2 :(得分:2)

您可能会遇到竞争状态。我已经碰到了好几次......你在会话中设置了一些东西,但是下一页看不到它。这通常是由于浏览器如此快速地请求第二页以至于第一页没有时间编写会话 - 所以第二页没有看到会话变量的更改。

在发送重定向标头之前尝试拨打session_write_close()

答案 3 :(得分:0)

<?php
  session_start();
  if (isset($_SESSION['username']))
  {
    header('Location: main.php');
    exit();
  }

该人应该如何登录?如果$ _SESSION没有设置用户名 BEFORE ,则会重定向您执行任何实际设置该变量的代码。这使得登录代码无法实现。