Я пытаюсь разобраться в сеансах PHP.Удаленные переменные сеанса после session_regenerate_id()
Я использую ShortPHP в качестве маршрутизатора, но код ShortPHP не касается сеансов.
Шаблон имеет session_start()
в первой строке: -
<?php
session_start();
include 's.php';
var_dump($_SESSION);
$sid = session_id();
echo $sid;
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head>
Этот шаблон выполнен первый для каждой страницы (я добавил первые несколько строк (var_dump и т.д.) с целью отладки), а затем конкретный код страницы. В данном случае, я использую следующий код: -
<?php
if (!defined('S')) die ("You've got no S"); // part of ShortPHP - irrelevant
if (!isset($_SESSION['login']) || $_SESSION['login'] != "1") {
echo "<p>Session is NOT set</p>";
//header() redirect to login here...
//exit();
}
$sri = session_regenerate_id();
var_dump($sri);
?>
Если я закомментировать session_regenerate_id()
тогда переменная сеанса (login
) по-прежнему доступен после перезагрузки страницы, но с session_regenerate_id()
включена, переменная сеанса будет удалена когда я перезагружаю страницу. Обратите внимание, что session_regenerate_id()
возвращает true
каждый раз.
Я даже зашел так далеко, чтобы прочитать сеанс, хранящийся на сервере, а файл для исходного сеанса содержит данные переменной сеанса, а после перезагрузки страницы новый файл сеанса не имеет переменных (размер файла равен нулю).
Я делаю что-то неправильно здесь?
У вас есть какой-либо вывод в браузере перед сбросом идентификатора и что возвращает 'session_regenerate_id()'? – jeroen
Отредактировал вопрос с ответами на ваши вопросы: Да и True – garethTheRed
Странно. Это имеет значение, если вы используете 'session_regenerate_id()' перед отправкой заголовков (вывод отправляется в браузер)? – jeroen