РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
268 of 1361 menu

Метод 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,
    который очищает все данные сессии
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить