Обработка уже начатого сеанса и set_cookie_params

#php #wordpress #session

#php #wordpress #сеанс

Вопрос:

Я видел много примеров о том, как определить, запущен ли сеанс PHP. Чего я не могу найти, так это как обрабатывать параметры cookie, если они запущены.

Вот мой код. Это в плагине WordPress. Если другой плагин запускает сеанс, я получаю предупреждение о настройке параметров cookie при запуске этого плагина. Как мне правильно установить эти параметры, если другой плагин уже запустил сеанс, не выполняя session_destroy и не испортив сеанс другого плагина?

     $session_length = (60 * 60) * 8; // 1 hour x 8 = 8 hours
    session_set_cookie_params($session_length, "/", null, false, true);
    session_start();
    setcookie(session_name(), session_id(), time()   $session_length);
 

Комментарии:

1. Сеансы могут быть запущены только один раз.

2. Я это прекрасно понимаю. Это не дает ответа на вопрос о том, как установить параметры файлов cookie после того, как сеанс уже запущен.

3. Какова цель вашего сценария? Чего вы хотите достичь? Пожалуйста, посмотрите на аннотации в руководстве: php.net/manual/en/function.session-set-cookie-params.php

Ответ №1:

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

Поскольку $_SESSION это глобальный особый случай в PHP и поскольку вы заявляете «Это в плагине WordPress», вы всегда будете произвольным one-of-many плагином для работы с сеансом, который может использоваться / устанавливаться / отключаться любым другим плагином one-of-many WordPress, который любой администратор WordPress может и будет загружать за пределамиуправление вашим плагином.

Поэтому:

Вам нужно определить $_SESSION , уже запущен (с session_name() ), чтобы проверить,:

  • а) там уже есть сеанс, а затем
  • б) если этот сеанс является вашим собственным

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


И какого черта вы в 2021 году пытаетесь установить сеанс с помощью плагина WordPress с security = false ?! ЭТО необходимо улучшить и обновить, прежде чем делать что-либо еще.

Комментарии:

1. Спасибо, session_name — это то, что я искал. Что касается secure=false, то в настоящее время он находится на локальном тестовом сервере без сертификата. Я надеюсь, что вы носите шлем. Люди, которые ездят на мотоциклах и делают поспешные выводы, всегда должны иметь его под рукой.