У меня есть PHP-скрипт, который возвращает чек покупателю на моем сайте. Когда они получат квитанцию, я хочу иметь возможность начать новый сеанс. Пока у меня есть фрагмент кода в конце скрипта, который возвращает страницу квитанции. Это:
if (ini_get("session.use_cookies")) {
$params = session_get_cookie_params();
setcookie(session_name(),
'',
time() - 42000,
$params["path"],
$params["domain"],
$params["secure"],
$params["httponly"]
);
}
session_destroy();
session_regenerate_id(true);
Когда я пользуюсь веб-сайтом и прохожу процесс покупки, после обслуживания страницы квитанции идентификатор сеанса остается прежним.
Тем не менее, я взял приведенный выше код и поместил его в отдельный скрипт под названием «rate.php ». Затем я назвал это в другом сценарии, например, так:
<?php
include("regenerate.php");
session_start();
echo("<br>id:".session_id());
include("regenerate.php");
session_start();
echo("<br>id:".session_id());
include("regenerate.php");
session_start();
echo("<br>id:".session_id());
include("regenerate.php");
session_start();
echo("<br>id:".session_id());
?>
Когда я запускаю этот скрипт, идентификатор сессии меняется каждый раз, когда запускается скрипт регенерации. Тем не менее, тот же код не работает на предполагаемой странице, которую я пытаюсь открыть до перезапуска сеанса.
Есть ли причина, по которой это может работать в одном случае, а не в другом? Я подумал, что это может быть потому, что текст уже записывается для вывода, однако это происходит в обоих случаях.
Вы не можете создать новый сеанс во время того же запроса, после отправки вывода в браузер.
Просто потому, что сессионный cookie уже отправлен — с заголовками. Так что, скорее всего, ваш второй звонок session_start()
выдает ошибку.
Вы можете найти больше информации о включении display_errors здесь: Как получить ошибки PHP для отображения?
Других решений пока нет …