Переменная сеанса PHP все еще устанавливает ПОСЛЕ заголовка отправлено - PullRequest
1 голос
/ 31 января 2011

index.php

<?php
session_start();
header("Location: somewhere.php");
?>

<html>
  <head></head>

  <body>
  <?php $_SESSION['foo'] = 'bar'; ?>
  </body>
</html>

где-то.php

<?php
session_start();
echo $_SESSION['foo'];
?>

Я устанавливаю переменную сеанса в теле после заголовкапозвоните в index.php.Тогда это найдено в somewhere.php.Это происходит даже после перезапуска браузера.Как это происходит?

Ответы [ 4 ]

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

Ну, почему бы и нет?

// starts session, sets cookie with session id
session_start();

// outputs Location header
header("Location: somewhere.php");

// rest of code keeps executing!

// sets session value foo
$_SESSION['foo'] = 'bar';

То, что вы выводите заголовок Location, не означает, что остальная часть сценария не выполняется.
Значение сеанса устанавливается и сохраняется на сервере, это полностью не зависит от того, были ли заголовки уже отправлены или нет. Единственный заголовок, который необходимо отправить клиенту, - это файл cookie, содержащий идентификатор сеанса, это может происходить до или после заполнения значений сеанса в памяти сервера.

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

РЕДАКТИРОВАТЬ: Erhm. Я устал. Я неправильно понял ваш вопрос. Не стесняйтесь игнорировать этот пост

Переменные сеанса: суперглобальные . Файл cookie устанавливается в браузере клиента с идентификатором сеанса. Все, что вы установили в $ _SESSION get, сохраняется на сервере, связанном с идентификатором сеанса клиента. Когда пользователь просматривает веб-страницу, PHP автоматически заполняет $ _SESSION любыми предыдущими данными, пока не истечет время сеанса.

1 голос
/ 31 января 2011

попробуйте это и посмотрите, получаете ли вы те же результаты:

<?php
session_start();
unset($_SESSION['foo']);
header("Location: somewhere.php");
?>

Edit:

    <?php
    session_start();
    unset($_SESSION['foo']);
    header("Location: somewhere.php");
    exit;//maybe this will stop the script from setting that session
    ?>
0 голосов
/ 31 января 2011

Будьте осторожны, когда ваш компилятор сгорел на 4-й строке " header (" Location :where.php "); "
ваш контроль переходит к где-то.php
Вы можете использовать это.

index.php

<? Php </p>

session_start ();

$ _ SESSION ["foo"] = "bar";

header ("Location :where.php");

?> Конечно, он будет работать

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