Рейтинг:3

Есть ли событие, связанное с созданием файла cookie сеанса для анонимных пользователей?

флаг cn

Мне нужно установить дополнительный файл cookie всякий раз, когда анонимный пользователь получает файл cookie сеанса. Это происходит, например, при выборе фасета в Search API. Конкретный вариант использования заключается в том, что мне нужен дополнительный набор файлов cookie специально для сторонней интеграции (GTranslate). hook_user_login не соответствует варианту использования, потому что пользователь на самом деле не вошел в систему, но он получает файл cookie сеанса при выборе фасета. Есть ли какое-то событие, на которое я могу подписаться, когда это произойдет, чтобы я мог ввести свой собственный файл cookie?

4uk4 avatar
флаг cn
Я не думаю, что есть конкретное событие, но вы можете подписаться на [KernelEvents::RESPONSE](https://api.drupal.org/api/drupal/vendor%21symfony%21http-kernel%21KernelEvents.php/constant /KernelEvents%3A%3ARESPONSE) и установить куки в заголовках ответа.
флаг cn
@ 4k4: если вы можете конкретизировать это, вам следует рассмотреть возможность публикации этого в качестве ответа. Я собираюсь попробовать это сегодня, но я хотел бы иметь возможность должным образом отблагодарить вас за это, если это сработает. ;)
Рейтинг:0
флаг ru

Вы можете попробовать подписчика на событие ответа на событие. Например: Создайте файл в CUSTOM_MODULE/src/EventSubscriber/SetSessionCookieSubscriber.php

пространство имен Drupal\CUSTOM_MODULE\EventSubscriber;

используйте Symfony\Component\HttpKernel\Event\FilterResponseEvent;
используйте Symfony\Component\HttpKernel\KernelEvents;
используйте Symfony\Component\EventDispatcher\EventSubscriberInterface;
используйте Symfony\Component\HttpFoundation\Request;

класс SetSessionCookieSubscriber реализует EventSubscriberInterface {
  публичная функция onResponse (FilterResponseEvent $event) {
    /** @var Запрос $request */
    $запрос = $event->getRequest();
    // Проверяем, правильный ли это запрос, например отправка фасетов
    $session = $request->getSession();
    // Проверяем значения сеанса
    $response = $event->getResponse();
    /** Здесь находится ваш пользовательский код */
    $response->headers->setCookie(new Cookie(...));
  }
  
  общедоступная статическая функция getSubscribedEvents() {
    $events[KernelEvents::RESPONSE][] = ['onResponse'];
    вернуть $события;
  }
}

Зарегистрируйте его в файле сервисов CUSTOM_MODULE.services.yml

Сервисы:
  CUSTOM_MODULE.setsessioncookie:
  класс: Drupal\CUSTOM_MODULE\EventSubscriber\SetSessionCookieSubscriber
  теги:
    - {имя: event_subscriber}
4uk4 avatar
флаг cn
Я добавил свой комментарий к коду.
Razeem Ahmad avatar
флаг ru
Спасибо 4K4 за редактирование.

Ответить или комментировать

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