<?php
namespace App\Listener;
use App\Entity\User;
use App\Entity\UserToken;
use App\Services\UserTokenManager;
use Doctrine\ORM\EntityManager;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpFoundation\Session\SessionInterface;
use Symfony\Component\HttpKernel\Event\FilterResponseEvent;
use Symfony\Component\HttpFoundation\Cookie;
use Symfony\Component\HttpKernel\HttpKernel;
use Symfony\Component\HttpKernel\Event\ResponseEvent;
use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
class GenerateCookieListener
{
protected $session;
private $crypt;
/**
* @var EntityManager
*/
protected $em;
/**
* @var TokenStorageInterface
*/
protected $tokenStorage;
protected $userTokenManager;
public function __construct(SessionInterface $session, EntityManagerInterface $em, TokenStorageInterface $tokenStorage, UserTokenManager $userTokenManager)
{
$this->session = $session;
$this->em = $em;
$this->userTokenManager = $userTokenManager;
$this->tokenStorage = $tokenStorage;
}
public function onKernelResponse(ResponseEvent $event): void
{
// Only for the “main” request
if ( ! $event->isMainRequest() ) {
return;
}
$request = $event->getRequest();
$response = $event->getResponse();
$session = $request->getSession();
//
// 1) Ensure the Symfony session is started so that
// it will send its own PHPSESSID cookie.
//
if (! $session->isStarted()) {
$session->start();
}
//
// 2) If there’s a cart_session cookie but the session
// doesn’t know about it yet, copy it in.
//
if ($request->cookies->has('cart_session') && ! $session->has('cart_session')) {
$session->set('cart_session', $request->cookies->get('cart_session'));
}
//
// 3) If there’s _still_ no cookie in the browser,
// generate a fresh ID, seed both cookie & session.
//
if (! $request->cookies->has('cart_session')) {
// generate a fresh 36-char ID
$chars = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
$rand = '';
for ($i = 0; $i < 36; $i++) {
$rand .= $chars[random_int(0, \strlen($chars) - 1)];
}
// store in session
$session->set('cart_session', $rand);
// set your cart_session cookie
$cookie = new Cookie(
'cart_session',
$rand,
new \DateTime('+14 days'),
'/',
null,
false,
true
);
$response->headers->setCookie($cookie);
}
}
private function curPageURL() {
$pageURL = 'http';
if ($_SERVER["HTTPS"] == "on") {$pageURL .= "s";}
$pageURL .= "://";
if ($_SERVER["SERVER_PORT"] != "80") {
$pageURL .= $_SERVER["HTTP_HOST"]."".$_SERVER["REQUEST_URI"];
} else {
$pageURL .= $_SERVER["HTTP_HOST"].$_SERVER["REQUEST_URI"];
}
return $pageURL;
}
}