Метод withPartitioned класса Cookie
Метод withPartitioned класса Cookie
возвращает новый объект cookie с включённым
флагом Partitioned. Такой cookie хранится
в отдельной партиции браузера, привязанной к
сайту верхнего уровня. Это нужно для cookie,
которые устанавливаются в контексте сторонних
ресурсов, например внутри iframe. Метод не
меняет исходный объект, а создаёт его копию.
Параметров метод не принимает. Флаг
Partitioned всегда устанавливается в
значение true.
Синтаксис
$cookie->withPartitioned();
Пример
Давайте создадим cookie и включим у него флаг
Partitioned:
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Cookie;
use Symfony\Component\HttpFoundation\Response;
class CookieController extends AbstractController
{
public function index(): Response
{
$cookie = Cookie::create('token')
->withValue('abcde')
->withPartitioned();
$res = new Response('hello');
$res->headers->setCookie($cookie);
return $res;
}
}
?>
Результат выполнения кода в заголовке ответа:
Set-Cookie: token=abcde; partitioned
Пример
Давайте проверим, что метод возвращает новый
объект, а исходный cookie остаётся без флага
Partitioned:
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Cookie;
use Symfony\Component\HttpFoundation\Response;
class CookieController extends AbstractController
{
public function index(): Response
{
$cookie = Cookie::create('token')->withValue('abcde');
$partitioned = $cookie->withPartitioned();
echo $cookie->isPartitioned() ? 'true' : 'false';
echo "\n";
echo $partitioned->isPartitioned() ? 'true' : 'false';
return new Response();
}
}
?>
Результат выполнения кода:
false
true
Пример
Давайте соберём cookie со всеми основными флагами и включим партиционирование:
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Cookie;
use Symfony\Component\HttpFoundation\Response;
class CookieController extends AbstractController
{
public function index(): Response
{
$cookie = Cookie::create('token')
->withValue('abcde')
->withSecure(true)
->withHttpOnly(true)
->withSameSite('none')
->withPartitioned();
$res = new Response('hello');
$res->headers->setCookie($cookie);
return $res;
}
}
?>
Результат выполнения кода в заголовке ответа:
Set-Cookie: token=abcde; secure; httponly; samesite=none; partitioned
Смотрите также
-
класс
Cookie,
который представляет HTTP-cookie -
метод
create,
который создаёт новый объект cookie -
метод
withValue,
который задаёт значение cookie -
метод
withSameSite,
который задаёт атрибут SameSite