Symfony 4.1: Melhorias na Sessão
Alguns usos de Request::getSession() foram descontinuados
O uso de Request::getSession()
quando nenhuma sessão existe foi descontinuado no Symfony 4.1 e lançará uma exceção no Symfony 5.0. A solução é sempre verificar primeiro se existe uma sessão com o método Request::hasSession()
:
// ...
if ($request->hasSession() && ($session = $request->getSession())) {
$session->set('some_key', 'some_value');
}
Permitir o cache de requisições que usam sessões
Sempre que a sessão é iniciada durante uma requisição, o Symfony transforma a resposta em uma resposta privada não-cacheável para evitar o vazamento de informações privadas. No entanto, até mesmo requisições usando sessão podem ser armazenadas em cache em algumas circunstâncias.
Por exemplo, informações relacionadas a algum grupo de usuários podem ser armazenadas em cache para todos os usuários pertencentes a esse grupo. O manuseio desses cenários avançados de armazenamento em cache está fora do escopo do Symfony, mas eles podem ser resolvidos com o FOSHttpCacheBundle.
Para desabilitar o comportamento padrão do Symfony que torna as requisições usando sessão não-cacheáveis, no Symfony 4.1 foi adicionado o cabeçalho NO_AUTO_CACHE_CONTROL_HEADER
que você pode adicionar às respostas:
use Symfony\Component\HttpKernel\EventListener\AbstractSessionListener;
$response->headers->set(AbstractSessionListener::NO_AUTO_CACHE_CONTROL_HEADER, 'true');
Permitir a migração de sessões
A migração de sessões (por exemplo, do sistema de arquivos para o banco de dados) é uma operação complicada que geralmente acaba perdendo todas as sessões existentes. É por isso que no Symfony 4.1 foi adicionada uma nova classe MigratingSessionHandler
para permitir a migração entre handlers de salvamento antigos e novos sem perder os dados da sessão.
É recomendado fazer a migração em três etapas:
use Symfony\Component\HttpFoundation\Session\Storage\Handler\MigratingSessionHandler;
$oldSessionStorage = ...;
$newSessionStorage = ...;
// The constructor of the migrating class are: MigratingSessionHandler($currentHandler, $writeOnlyHandler)
// Step 1. Do this during the "garbage collection period of time" to get all sessions in the new storage
$sessionStorage = new MigratingSessionHandler($oldSessionStorage, $newSessionStorage);
// Step 2. Do this while you verify that the new storage handler works as expected
$sessionStorage = new MigratingSessionHandler($newSessionStorage, $oldSessionStorage);
// Step 3. Your app is now ready to switch to the new storage handler
$sessionStorage = $newSessionStorage;
Tradução de: New in Symfony 4.1: Session improvements