Учебники

Symfony — Cookies и управление сессиями

Компонент Symfony HttpFoundation обеспечивает управление файлами cookie и сеансами объектно-ориентированным способом. Cookie обеспечивает хранение данных на стороне клиента и поддерживает только небольшой объем данных. Обычно это 2 КБ на домен, и это зависит от браузера. Сеанс обеспечивает хранение данных на стороне сервера и поддерживает большое количество данных. Давайте посмотрим, как создать cookie и сеанс в веб-приложении Symfony.

печенье

Symfony предоставляет класс Cookie для создания элемента cookie. Давайте создадим цвет cookie, срок действия которого истекает через 24 часа со значением blue . Параметр конструктора класса cookie выглядит следующим образом.

  • имя (тип: строка) — имя файла cookie
  • значение (тип: строка) — значение cookie
  • expire (тип: целое число / строка / дата / время) — информация об истечении срока действия
  • путь (тип: строка) — путь к серверу, на котором доступен файл cookie
  • домен (тип: строка) — адрес домена, в котором доступен файл cookie
  • secure (type: boolean) — нужно ли передавать cookie в HTTPS-соединении
  • httpOnly (тип: логическое значение) — доступен ли файл cookie только по протоколу HTTP
use Symfony\Component\HttpFoundation\Cookie;  
$cookie = new Cookie('color', 'green', strtotime('tomorrow'), '/', 
   'somedomain.com', true, true);

Symfony также предоставляет следующую возможность создания файлов cookie на основе строк.

$cookie = Cookie::fromString('color = green; expires = Web, 4-May-2017 18:00:00 +0100; 
path=/; domain = somedomain.com; secure; httponly');

Теперь созданный файл cookie необходимо прикрепить к заголовку объекта ответа http следующим образом.

$response->headers->setCookie($cookie);

Чтобы получить cookie, мы можем использовать объект запроса следующим образом.

$cookie = $request->cookie->get('color'); 

Здесь request-> cookie имеет тип PropertyBag, и мы можем манипулировать им, используя методы PropertyBag.

сессия

Symfony предоставляет класс Session, реализующий интерфейс SessionInterface. Важный сеанс API заключается в следующем,

startзапускает сеанс

Session $session = new Session(); 
$session->start(); 

invalidate — очищает все данные сеанса и восстанавливает идентификатор сеанса.

set — сохраняет данные в сеансе с помощью ключа.

$session->set('key', 'value');

Мы можем использовать любые данные в значении сеанса, быть простым целым числом для сложных объектов.

get — получает данные из сеанса, используя ключ.

$val = $session->get('key');

удалить — удаляет ключ из сеанса.

clear — удаляет данные сеанса

FlashBag

Сессия предоставляет еще одну полезную функцию под названием FlashBag . Это специальный контейнер внутри сессии, содержащий данные только во время перенаправления страницы. Это полезно в http перенаправлениях. Перед перенаправлением на страницу данные могут быть сохранены во FlashBag вместо обычного контейнера сеанса, и сохраненные данные будут доступны в следующем запросе (перенаправленная страница). Затем данные будут автоматически признаны недействительными.