PHP сессия не может быть перезапущена иногда

У меня есть 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());
?>

Когда я запускаю этот скрипт, идентификатор сессии меняется каждый раз, когда запускается скрипт регенерации. Тем не менее, тот же код не работает на предполагаемой странице, которую я пытаюсь открыть до перезапуска сеанса.

Есть ли причина, по которой это может работать в одном случае, а не в другом? Я подумал, что это может быть потому, что текст уже записывается для вывода, однако это происходит в обоих случаях.

0

Решение

Вы не можете создать новый сеанс во время того же запроса, после отправки вывода в браузер.

Просто потому, что сессионный cookie уже отправлен — с заголовками. Так что, скорее всего, ваш второй звонок session_start() выдает ошибку.

Вы можете найти больше информации о включении display_errors здесь: Как получить ошибки PHP для отображения?

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]