src/Listener/GenerateCookieListener.php line 81

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 for the “main” request
  38.         if ( ! $event->isMainRequest() ) {
  39.             return;
  40.         }
  41.         $request  $event->getRequest();
  42.         $response $event->getResponse();
  43.         $session  $request->getSession();
  44.         //
  45.         // 1) Ensure the Symfony session is started so that
  46.         //    it will send its own PHPSESSID cookie.
  47.         //
  48.         if (! $session->isStarted()) {
  49.             $session->start();
  50.         }
  51.         //
  52.         // 2) If there’s a cart_session cookie but the session
  53.         //    doesn’t know about it yet, copy it in.
  54.         //
  55.         if ($request->cookies->has('cart_session') && ! $session->has('cart_session')) {
  56.             $session->set('cart_session'$request->cookies->get('cart_session'));
  57.         }
  58.         //
  59.         // 3) If there’s _still_ no cookie in the browser,
  60.         //    generate a fresh ID, seed both cookie & session.
  61.         //
  62.         if (! $request->cookies->has('cart_session')) {
  63.             // generate a fresh 36-char ID
  64.             $chars '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
  65.             $rand  '';
  66.             for ($i 0$i 36$i++) {
  67.                 $rand .= $chars[random_int(0\strlen($chars) - 1)];
  68.             }
  69.             // store in session
  70.             $session->set('cart_session'$rand);
  71.             // set your cart_session cookie
  72.             $cookie = new Cookie(
  73.                 'cart_session',
  74.                 $rand,
  75.                 new \DateTime('+14 days'),
  76.                 '/',
  77.                 null,
  78.                 false,
  79.                 true
  80.             );
  81.             $response->headers->setCookie($cookie);
  82.         }
  83.     }
  84.     private function curPageURL() {
  85.         $pageURL 'http';
  86.         if ($_SERVER["HTTPS"] == "on") {$pageURL .= "s";}
  87.         $pageURL .= "://";
  88.         if ($_SERVER["SERVER_PORT"] != "80") {
  89.             $pageURL .= $_SERVER["HTTP_HOST"]."".$_SERVER["REQUEST_URI"];
  90.         } else {
  91.             $pageURL .= $_SERVER["HTTP_HOST"].$_SERVER["REQUEST_URI"];
  92.         }
  93.         return $pageURL;
  94.     }
  95. }