Используйте переменную PHP $ _SESSION и затем сбросьте ее - PullRequest
0 голосов
/ 07 ноября 2019

Я создаю сайт на Drupal 8. В функции предварительной обработки модуля я пытаюсь проверить, завершается ли переменная $_SESSION при загрузке страницы, что-то сделать с этой переменной, а затем сбросить переменную. Вот упрощенная версия кода:

function geolocation_filter_preprocess_page() {
  if (isset($_SESSION['blocked_submission'])) {
    $messageText = $_SESSION['blocked_submission']['text'];
    $messageType = $_SESSION['blocked_submission']['type'];
    echo $messageText . $messageType;

    unset($_SESSION['blocked_submission']);
  }
}

Если я удаляю вызов функции unset, текст печатается, как и ожидалось.

Переменная не может быть сброшена, если тольковыполнение кода попадает в блок if, но тогда эхо не происходит, как если бы оно не попадало в блок if. Я думал, что PHP выполняется линейно, поэтому я ожидал, что произойдет эхо-выражение, и тогда переменная $_SESSION будет не установлена. Чего мне не хватает?

1 Ответ

0 голосов
/ 07 ноября 2019

В некоторых случаях отключение сеанса var НЕ РАБОТАЕТ, если вы сначала не запустите сеанс. может быть, проверьте ваш код, если вы ссылаетесь со страницы выхода. функция unset работает только если session_start ();вызывается в вашем скрипте

 session_start();

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

 $_SESSION['blocked_submission'] = "";

также НЕ сбрасывайте целое $_SESSION с помощью unset($_SESSION), так как это отключит регистрацию переменных сеанса через суперглобальный $ _SESSION.

...