Класс Session
Класс Session представляет собой объект сессии,
который хранит данные между запросами пользователя.
Он реализует интерфейс SessionInterface и предоставляет
методы для чтения, записи, удаления и проверки значений.
Объект сессии доступен через сервис RequestStack
или внедряется в контроллер как аргумент Request.
Синтаксис
$request->getSession()
Пример
Давайте получим объект сессии в контроллере и запишем
в него значение по ключу 'user':
<?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 ArticleController extends AbstractController
{
#[Route('/session', name: 'article_session')]
public function index(Request $request): Response
{
$session = $request->getSession();
$session->set('user', 'abcde');
return new Response('session saved');
}
}
?>
Результат выполнения кода:
"session saved"
Пример
Давайте прочитаем значение из сессии по ключу 'user':
<?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 ArticleController extends AbstractController
{
#[Route('/session/read', name: 'article_session_read')]
public function read(Request $request): Response
{
$session = $request->getSession();
$user = $session->get('user', 'default');
return new Response($user);
}
}
?>
Результат выполнения кода:
abcde
Пример
Давайте проверим наличие ключа 'user' в сессии
и удалим его:
<?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 ArticleController extends AbstractController
{
#[Route('/session/check', name: 'article_session_check')]
public function check(Request $request): Response
{
$session = $request->getSession();
if ($session->has('user')) {
$session->remove('user');
return new Response('removed');
}
return new Response('not found');
}
}
?>
Результат выполнения кода:
removed
Пример
Давайте получим все данные сессии через метод all
и очистим её методом clear:
<?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 ArticleController extends AbstractController
{
#[Route('/session/all', name: 'article_session_all')]
public function all(Request $request): Response
{
$session = $request->getSession();
$session->set('user', 'abcde');
$session->set('role', 'admin');
$data = $session->all();
$session->clear();
return new Response(json_encode($data));
}
}
?>
Результат выполнения кода:
{"user":"abcde","role":"admin"}