Метод withExpires
Метод withExpires класса Cookie возвращает новый объект cookie, у которого изменено время истечения срока действия. Первым параметром передаётся момент времени, после которого браузер перестанет отправлять cookie на сервер. Объект Cookie является неизменяемым, поэтому исходный объект не меняется, а возвращается его копия с новым значением.
Синтаксис
public function withExpires(?int|string|\DateTimeInterface $expires): static
Пример
Давайте создадим cookie и зададим ему время жизни, передав строку с датой в формате, понятном конструктору DateTime:
<?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');
$cookie = $cookie->withExpires('+1 hour');
$response = new Response('hello');
$response->headers->setCookie($cookie);
return $response;
}
}
?>
Результат выполнения кода в заголовке ответа:
Set-Cookie: user=abcde; expires=Sun, 14 Sep 2026 15:00:00 GMT; path=/; httponly
Пример
Давайте зададим время истечения через объект DateTime, отстоящий от текущего момента на один день:
<?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
{
$expires = new \DateTimeImmutable('+1 day');
$cookie = new Cookie('user', 'abcde');
$cookie = $cookie->withExpires($expires);
$response = new Response('hello');
$response->headers->setCookie($cookie);
return $response;
}
}
?>
Результат выполнения кода в заголовке ответа:
Set-Cookie: user=abcde; expires=Mon, 15 Sep 2026 15:00:00 GMT; path=/; httponly
Пример
Давайте передадим время истечения в виде целого числа - количества секунд, прошедших с начала эпохи Unix:
<?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');
$cookie = $cookie->withExpires(time() + 3600);
$response = new Response('hello');
$response->headers->setCookie($cookie);
return $response;
}
}
?>
Результат выполнения кода в заголовке ответа:
Set-Cookie: user=abcde; expires=Sun, 14 Sep 2026 15:00:00 GMT; path=/; httponly