Files
MtoRagSystem/src/Http/ClientIdResolver.php
2026-02-11 14:15:08 +01:00

47 lines
1.1 KiB
PHP

<?php
declare(strict_types=1);
namespace App\Http;
use Symfony\Component\HttpFoundation\Cookie;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Uid\Uuid;
/**
* ClientIdResolver
*
* Resolves a stable, anonymous client identifier for browser-based users.
* The identifier is stored as an HttpOnly cookie.
*/
final class ClientIdResolver
{
private const COOKIE_NAME = 'ai_client_id';
public function resolve(Request $request, Response $response): string
{
$clientId = $request->cookies->get(self::COOKIE_NAME);
if (is_string($clientId) && $clientId !== '') {
return $clientId;
}
$clientId = Uuid::v4()->toRfc4122();
$response->headers->setCookie(
new Cookie(
name: self::COOKIE_NAME,
value: $clientId,
expire: strtotime('+1 year'),
path: '/',
secure: false, // set true in production with HTTPS
httpOnly: true,
sameSite: Cookie::SAMESITE_LAX
)
);
return $clientId;
}
}