Метод migrate класса Session
Метод migrate класса Session создаёт новую сессию
с новым идентификатором, при этом сохраняя все данные
текущей сессии. Метод не принимает параметров и возвращает
true в случае успешной миграции. Обычно используется
для повышения безопасности, например, после авторизации
пользователя, чтобы предотвратить атаки с фиксацией сессии.
Синтаксис
public function migrate(bool $destroy = false): bool
Пример
Давайте создадим сессию, сохраним в неё данные и выполним миграцию, чтобы получить новый идентификатор:
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\Attribute\Route;
class SessionController extends AbstractController
{
#[Route('/session/migrate', name: 'session_migrate')]
public function migrate(Request $request): Response
{
$session = $request->getSession();
$session->set('user', 'abcde');
$oldId = $session->getId();
$session->migrate();
$newId = $session->getId();
return new Response($oldId . ' -> ' . $newId);
}
}
?>
Результат выполнения кода:
"abc123 -> def456"
Пример
Давайте проверим, что после миграции данные сессии сохраняются:
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\Attribute\Route;
class SessionController extends AbstractController
{
#[Route('/session/migrate-data', name: 'session_migrate_data')]
public function migrateData(Request $request): Response
{
$session = $request->getSession();
$session->set('user', 'abcde');
$session->migrate();
$res = $session->get('user');
return new Response($res);
}
}
?>
Результат выполнения кода:
"abcde"
Пример
Давайте используем метод migrate с параметром
destroy, чтобы уничтожить старый файл сессии:
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\Attribute\Route;
class SessionController extends AbstractController
{
#[Route('/session/migrate-destroy', name: 'session_migrate_destroy')]
public function migrateDestroy(Request $request): Response
{
$session = $request->getSession();
$session->set('user', 'abcde');
$session->migrate(true);
$res = $session->get('user');
return new Response($res);
}
}
?>
Результат выполнения кода:
"abcde"
Смотрите также
-
класс
Session,
который управляет сессией -
метод
invalidate,
который уничтожает все данные сессии -
метод
getId,
который возвращает идентификатор сессии -
метод
clear,
который очищает все данные сессии