Класс Cookie
Класс Cookie из пространства имён
Symfony\Component\HttpFoundation\Cookie
представляет собой HTTP-cookie. Объект этого класса
хранит имя, значение и все атрибуты cookie: срок
жизни, путь, домен, флаг secure, флаг
httpOnly, политику sameSite и флаг
partitioned. Первым параметром конструктора
передаётся имя cookie, вторым - значение. Далее можно
передать срок жизни, путь и домен. Класс неизменяемый:
каждый метод with... возвращает новый объект
cookie с изменённым параметром, а исходный объект
остаётся прежним.
Синтаксис
<?php
use Symfony\Component\HttpFoundation\Cookie;
$cookie = new Cookie(
string $name,
string $value = null,
int $expire = 0,
string $path = '/',
string $domain = null,
bool $secure = null,
bool $httpOnly = true,
bool $raw = false,
string $sameSite = 'lax',
bool $partitioned = false
);
?>
Пример
Давайте создадим простое cookie с именем 'user'
и значением 'abcde' и вернём его в ответе:
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Cookie;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Attribute\Route;
class CookieController extends AbstractController
{
#[Route('/cookie', name: 'cookie_index')]
public function index(): Response
{
$cookie = new Cookie('user', 'abcde');
$response = new Response('cookie created');
$response->headers->setCookie($cookie);
return $response;
}
}
?>
Результат выполнения кода:
"cookie created"
Пример
Давайте прочитаем значение cookie из запроса:
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Attribute\Route;
class CookieController extends AbstractController
{
#[Route('/cookie/read', name: 'cookie_read')]
public function read(Request $request): Response
{
$value = $request->cookies->get('user', 'default');
return new Response($value);
}
}
?>
Результат выполнения кода, если cookie user
равно 'abcde':
"abcde"
Пример
Давайте создадим cookie с настройками через методы
withValue, withExpires,
withPath, withSecure,
withHttpOnly и withSameSite:
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Cookie;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Attribute\Route;
class CookieController extends AbstractController
{
#[Route('/cookie/config', name: 'cookie_config')]
public function config(): Response
{
$cookie = (new Cookie('user'))
->withValue('abcde')
->withExpires(time() + 3600)
->withPath('/')
->withSecure(true)
->withHttpOnly(true)
->withSameSite(Cookie::SAMESITE_STRICT);
$response = new Response('cookie configured');
$response->headers->setCookie($cookie);
return $response;
}
}
?>
Результат выполнения кода:
"cookie configured"
Пример
Давайте создадим cookie с доменом и флагом
partitioned:
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Cookie;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Attribute\Route;
class CookieController extends AbstractController
{
#[Route('/cookie/domain', name: 'cookie_domain')]
public function domain(): Response
{
$cookie = (new Cookie('user', 'abcde'))
->withDomain('example.com')
->withPartitioned(true);
$response = new Response('cookie with domain');
$response->headers->setCookie($cookie);
return $response;
}
}
?>
Результат выполнения кода:
"cookie with domain"
Смотрите также
-
метод
create,
который создаёт объект cookie -
метод
withValue,
который задаёт значение cookie -
метод
withExpires,
который задаёт срок жизни cookie -
метод
withSameSite,
который задаёт политику SameSite