Como utilizar sessões no Laravel

Como utilizar sessões no Laravel

Vemos nesse artigo o essencial para manipulação de sessões e suas configurações.

Sessões são informações armazenadas no servidor que podem ser consultados a qualquer momento, uma das suas vantagens é a facilidade em gerência-las. Por outro lado, devemos tomar cuidado com a quantidade de informação salvas, dando preferência para informações que se referem a uma ação ou estado o usuário, já que seu armazenamento pode ficar lento ou indisponível em um alto volume.

Quando criamos uma sessão no servidor, automaticamente um Cookie é gerado no cliente, pois como o protocolo HTTP não tem estado, o servidor não sabe qual sessão pertence a qual cliente, sendo assim, a cada nova requisição, o Session id é enviado para o servidor.

Em sistema grandes como lojas virtuais e sites de multimédia, o volume de armazenamento é tão alto que é necessário servidores apenas para gerenciar essas informações.

Configurando sessões no Laravel

O arquivo de configuração de sessão é armazenado em config/session.php. Por padrão o driver file já está atribuído, ele nos diz como as informações serão armazenadas, conheça algumas das opções disponíveis:

  • file - as sessões são armazenadas em storage/framework/sessions, esse é o valor padrão.;
  • cookie - as sessões são armazenadas em cookies criptografados seguros;
  • database - as sessões são armazenadas em um banco de dados relacional;
  • memcached/redis - as sessões são armazenadas em um armazenamentos rápidos baseados em cache;
  • dynamodb - as sessões são armazenadas no AWS DynamoDB;
  • array - as sessões são armazenadas em um array PHP e não serão persistidas.

Caso você precise modificar o tipo de armazenamento, basta alterar o driver como mostra o código a seguir.

'driver' => env('SESSION_DRIVER', 'file'),

Vale lembrar que também é possível definir o valor no .ENV, como mostra o exemplo abaixo.

SESSION_DRIVER=file

Definindo as rotas da aplicação

Antes de mais nada, vamos registrar as nossas rotas, assim cada uma delas irá executar uma ação diferente. Veja abaixo a rota e o método de ação na classe SessaoController.

Route::prefix('sessao')->group(function () {
    route::get('/criar', [SessaoController::class, 'criar']);
    route::get('/ler', [SessaoController::class, 'ler']);
    route::get('/verifica', [SessaoController::class, 'verifica']);
    route::get('/remove', [SessaoController::class, 'remove']);
});

Vamos acessar da seguinte forma cada uma das nossas rotas:

  • Criar - http://localhost:8000/sessao/criar
  • Ler - http://localhost:8000/sessao/ler
  • Verificar se existe - http://localhost:8000/sessao/verifica 
  • Remover- http://localhost:8000/sessao/remove

Utilizando o Helper Session

Para o nosso primeiro exemplo, vamos utilizar a função de helper session, ela nos prove alguns métodos interessantes, que são eles:

  • put - Cria uma nova sessão, basta informar a chave no primeiro parâmetro e o seu valor no segundo;
  • get - Obtém um valor de sessão, bata passar o nome da chave como parâmetro;
  • has - Verifica se uma sessão existe, basta passar o nome da chave com o parâmetro;
  • remove - Como o nome já deixa claro, remove uma sessão quando uma chave é informada.

Vamos ver agora os quatro exemplos acima de forma prática.

class SessaoController extends Controller
{
    public function criar()
    {
        session()->put('usuario_id', '123');
    }

    public function ler()
    {
        echo session()->get('usuario_id');
    }

    public function verifica()
    {
        if(session()->has('usuario_id')){
            echo 'Existe!';
        }else{
            echo 'Não existe!';
        }
    }

    public function remove()
    {
        session()->remove('usuario_id');
    }
}

Utilizando a classe Request

O exemplo acima é limpo e funcional, mas agora vamos ver outra abordagem que segue a utilização das funções acima, o que muda é que vamos assinar nossos método com a classe Resquest e acessar as sessões a partir delas.

class SessaoController extends Controller
{
    public function criar(Request $request)
    {
        $request->session()->put('usuario_id', '123');
    }

    public function ler(Request $request)
    {
        echo $request->session()->get('usuario_id');
    }

    public function verifica(Request $request)
    {
        if($request->session()->has('usuario_id')){
            echo 'Existe!';
        }else{
            echo 'Não existe!';
        }
    }

    public function remove(Request $request)
    {
        $request->session()->remove('usuario_id');
    }
}

Existem outros métodos bem interessantes, como o all() para retornar todas as sessões existentes.

$request->session()->all();

Para saber se um item existe na sessão atual, utilizamos o método exists() mesmo que não fornecemos a sua chave.

if ($request->session()->exists('users')) {
    //
}

Agora se você quer saber se um item não existe, para isso utilize o método missing() passando o nome da informação.

if ($request->session()->missing('users')) {
    //
}

Para criar um novo registro a gente viu o método put, mas também podemos fornecer a chave e valor na função session.

session(['key' => 'value']);

Além dos vários outros métodos existentes, vamos ver o último, que é o método pull(), ele obtém um registro e automaticamente já remove a sessão. Note que no segundo parâmetro informação um valor default caso a sessão não exista.

$request->session()->pull('key', 'default');

Como tudo no Laravel, utilizar sessões também é um processo tranquilo e rápido. 

Para aprender a trabalhar com Flash Session, veja nosso artigo Redirect com Flash Session no Laravel.

Vou ficando por aqui, nos vemos no próximo artigo.

Gunnar Correa
Gunnar Correa

Autodidata, Graduado em Desenvolvimento Web, Especialista em Tecnologias na Educação e Pós-graduando em Segurança da Informação. Começou seus estudos na área de programação quando era criança, e atualmente, está estudando desenvolvimento de jogos. É CEO do portal SatellaSoft, criado em 2009 com o intuito de compartilhar conhecimento de forma gratuita e inédita.

Deixe um comentário