Puncte:3

Există un eveniment legat de crearea unui cookie de sesiune pentru utilizatori anonimi?

drapel cn

Trebuie să setez un cookie suplimentar ori de câte ori un utilizator anonim a primit un cookie de sesiune. Acest lucru se întâmplă atunci când selectați o fațetă în Search API, de exemplu. Cazul de utilizare specific este că am nevoie de un set suplimentar de cookie-uri special pentru o integrare terță parte (GTranslate). hook_user_login nu îndeplinește cazul de utilizare deoarece utilizatorul nu este de fapt conectat, dar primește un cookie de sesiune la selectarea unei fațete. Există vreun eveniment la care să mă pot abona atunci când se întâmplă, astfel încât să îmi pot injecta cookie-ul personalizat?

4uk4 avatar
drapel cn
Nu cred că există un eveniment anume, dar vă puteți abona la [KernelEvents::RESPONSE](https://api.drupal.org/api/drupal/vendor%21symfony%21http-kernel%21KernelEvents.php/constant /KernelEvents%3A%3ARESPONSE) și setați un cookie în antetele răspunsului.
drapel cn
@4k4: dacă poți să concretizezi asta, ar trebui să te gândești să postezi asta ca răspuns. O să încerc asta astăzi, dar aș dori să pot să vă creditez în mod corespunzător pentru asta dacă funcționează. ;)
Puncte:0
drapel ru

Puteți încerca un abonat la eveniment de răspuns la eveniment. Pentru ex: Creați un fișier în CUSTOM_MODULE/src/EventSubscriber/SetSessionCookieSubscriber.php

spațiu de nume Drupal\CUSTOM_MODULE\EventSubscriber;

utilizați Symfony\Component\HttpKernel\Event\FilterResponseEvent;
utilizați Symfony\Component\HttpKernel\KernelEvents;
utilizați Symfony\Component\EventDispatcher\EventSubscriberInterface;
utilizați Symfony\Component\HttpFoundation\Request;

clasa SetSessionCookieSubscriber implementează EventSubscriberInterface {
  funcția publică onResponse(FilterResponseEvent $event) {
    /** @var Solicitare $cerere */
    $cerere = $eveniment->getRequest();
    // Verificați dacă aceasta este cererea corectă, de exemplu postarea fațetelor
    $session = $request->getSession();
    // Verificați valorile sesiunii
    $răspuns = $eveniment->getResponse();
    /** Codul personalizat merge aici */
    $răspuns->anteturi->setCookie(nou cookie(...));
  }
  
  funcție publică statică getSubscribedEvents() {
    $events[KernelEvents::RESPONSE][] = ['onResponse'];
    returnează $evenimente;
  }
}

Înregistrați-l în fișierul dvs. de servicii CUSTOM_MODULE.services.yml

Servicii:
  CUSTOM_MODULE.setsessioncookie:
  clasa: Drupal\CUSTOM_MODULE\EventSubscriber\SetSessionCookieSubscriber
  Etichete:
    - { nume: event_subscriber }
4uk4 avatar
drapel cn
Am adăugat comentariul meu la cod.
Razeem Ahmad avatar
drapel ru
Mulțumesc 4K4 pentru editare.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.