Что не так с тем, как я перенаправляю между двумя страницами? - PullRequest
0 голосов
/ 11 января 2011

Опять же, чрезвычайно нубский вопрос 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/.

К сожалению, # 2 не бывает. Что может быть не так с моим кодом?

Ответы [ 4 ]

3 голосов
/ 11 января 2011

Вы должны использовать полностью определенный URL:

header('Location: http://localhost/main.php ');
2 голосов
/ 11 января 2011

Возможно, вы находитесь здесь в состоянии гонки.Я сталкивался с этим несколько раз ... вы установили некоторые вещи в сеансе, но на следующей странице это не видно.Обычно это происходит из-за того, что браузер запрашивает вторую страницу так быстро, что первая не успела записать сеанс, поэтому вторая не видит изменений в переменных сеанса.

Попробуйте вызвать session_write_close() перед отправкой заголовка перенаправления.

2 голосов
/ 11 января 2011

Вы должны использовать абсолютные URI, такие как Location: / или Location: /main.php.

0 голосов
/ 11 января 2011
<?php
  session_start();
  if (isset($_SESSION['username']))
  {
    header('Location: main.php');
    exit();
  }

Как человек должен войти в систему?Вы перенаправляете, если $ _SESSION не имеет установленного имени пользователя ДО , вы делаете любой код, который фактически установит эту переменную.Это делает код входа практически недоступным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...