src/Listener/GenerateCookieListener.php line 68

Open in your IDE?
  1. <?php
  2. namespace App\Listener;
  3. use App\Entity\User;
  4. use App\Entity\UserToken;
  5. use App\Services\UserTokenManager;
  6. use Doctrine\ORM\EntityManager;
  7. use Doctrine\ORM\EntityManagerInterface;
  8. use Symfony\Component\HttpFoundation\RedirectResponse;
  9. use Symfony\Component\HttpFoundation\Session\SessionInterface;
  10. use Symfony\Component\HttpKernel\Event\FilterResponseEvent;
  11. use Symfony\Component\HttpFoundation\Cookie;
  12. use Symfony\Component\HttpKernel\HttpKernel;
  13. use Symfony\Component\HttpKernel\Event\ResponseEvent;
  14. use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
  15. class GenerateCookieListener
  16. {
  17.     protected $session;
  18.     private $crypt;
  19.     /**
  20.      * @var EntityManager
  21.      */
  22.     protected $em;
  23.     /**
  24.      * @var TokenStorageInterface
  25.      */
  26.     protected $tokenStorage;
  27.     protected $userTokenManager;
  28.     public function __construct(SessionInterface $sessionEntityManagerInterface $emTokenStorageInterface $tokenStorageUserTokenManager $userTokenManager)
  29.     {
  30.         $this->session $session;
  31.         $this->em $em;
  32.         $this->userTokenManager $userTokenManager;
  33.         $this->tokenStorage $tokenStorage;
  34.     }
  35.     public function onKernelResponse(ResponseEvent $event): void
  36.     {
  37.         // only on the “main” request
  38.         if (!$event->isMasterRequest()) {
  39.             return;
  40.         }
  41.         $request  $event->getRequest();
  42.         $response $event->getResponse();
  43.         // If the controller has already set a cart_session cookie, do nothing
  44.         foreach ($response->headers->getCookies() as $cookie) {
  45.             if ($cookie->getName() === 'cart_session') {
  46.                 return;
  47.             }
  48.         }
  49.         // Otherwise, if there's no valid cookie in the browser, seed one
  50.         $existing $request->cookies->get('cart_session''');
  51.         if (!is_string($existing) || strlen($existing) !== 36) {
  52.             $chars '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
  53.             $rand  '';
  54.             for ($i 0$i 36$i++) {
  55.                 $rand .= $chars[random_int(0strlen($chars) - 1)];
  56.             }
  57.             // also store in session if you want
  58.             $request->getSession()->set('cart_session'$rand);
  59.             // set it on the response
  60.             $response->headers->setCookie(new Cookie(
  61.                 'cart_session',
  62.                 $rand,
  63.                 new \DateTime('+14 days'),
  64.                 '/',
  65.                 null,
  66.                 false,
  67.                 true
  68.             ));
  69.         }
  70.     }
  71.     private function curPageURL() {
  72.         $pageURL 'http';
  73.         if ($_SERVER["HTTPS"] == "on") {$pageURL .= "s";}
  74.         $pageURL .= "://";
  75.         if ($_SERVER["SERVER_PORT"] != "80") {
  76.             $pageURL .= $_SERVER["HTTP_HOST"]."".$_SERVER["REQUEST_URI"];
  77.         } else {
  78.             $pageURL .= $_SERVER["HTTP_HOST"].$_SERVER["REQUEST_URI"];
  79.         }
  80.         return $pageURL;
  81.     }
  82. }