Sessões

O gerenciamento de sessões é essencial para muitas aplicações web, permitindo armazenar informações do usuário entre diferentes requisições. Neste guia, você aprenderá como configurar e utilizar sessões no Lithe de maneira eficiente.

Configuração do Middleware de Sessão

Para utilizar sessões no Lithe, é necessário configurar um middleware responsável por gerenciar as sessões. Este middleware inicializa a sessão e a torna disponível em todas as requisições. Para configurar o middleware de sessão, adicione-o à instância do seu aplicativo Lithe utilizando o método use():

use Lithe\Middleware\Session\session;

$app->use(session());

Esta configuração inicializa a sessão com as configurações padrão definidas no middleware.


Usando Sessões

Após a configuração do middleware, você pode acessar e manipular variáveis de sessão em qualquer rota ou controlador.

Definindo Variáveis de Sessão

Para definir variáveis de sessão dentro de uma rota, utilize o método put():

$app->get('/set-session', function ($req, $res) {
    $req->session->put('user_name', 'John Doe');
    return $res->send('Variável de sessão "user_name" definida!');
});

Ou você pode definir variáveis diretamente usando métodos mágicos:

$app->get('/set-session', function ($req, $res) {
    $req->session->user_name = 'John Doe';
    return $res->send('Variável de sessão "user_name" definida!');
});

Obtendo Variáveis de Sessão

Para obter o valor de uma variável de sessão, use o método get() dentro de uma rota:

$app->get('/get-session', function ($req, $res) {
    $userName = $req->session->get('user_name', 'Guest');
    return $res->send('Usuário: ' . $userName);
});

Ou você pode obter variáveis diretamente com métodos mágicos:

$app->get('/get-session', function ($req, $res) {
    $userName = $req->session->user_name ?? 'Guest';
    return $res->send('Usuário: ' . $userName);
});

Removendo Variáveis de Sessão

Para remover uma variável específica, use o método forget() dentro de uma rota:

$app->get('/remove-session', function ($req, $res) {
    $req->session->forget('user_id');
    return $res->send('Variável de sessão "user_id" removida!');
});

Para remover múltiplas variáveis ao mesmo tempo:

$app->get('/remove-multiple-sessions', function ($req, $res) {
    $req->session->forget(['user_name', 'last_login']);
    return $res->send('Variáveis de sessão removidas!');
});

Para destruir completamente a sessão e remover todas as variáveis:

$app->get('/destroy-session', function ($req, $res) {
    $req->session->destroy();
    return $res->send('Sessão destruída!');
});

Verificando a Existência de Variáveis de Sessão

Para verificar se uma variável de sessão existe, utilize o método has():

$app->get('/check-session', function ($req, $res) {
    if ($req->session->has('user_id')) {
        return $res->send('Variável "user_id" existe na sessão.');
    }
    return $res->send('Variável "user_id" não existe na sessão.');
});

O método has() também suporta a verificação de múltiplas variáveis de sessão ao mesmo tempo:

$app->get('/check-multiple-sessions', function ($req, $res) {
    if ($req->session->has(['user_name', 'last_login'])) {
        return $res->send('Todas as variáveis de sessão existem.');
    }
    return $res->send('Nem todas as variáveis de sessão existem.');
});

Configurações Avançadas

Você pode personalizar as configurações de sessão passando um array de opções ao middleware session(). As opções disponíveis são:

  • lifetime: Tempo de vida da sessão em segundos. Define por quanto tempo a sessão será mantida ativa.
  • domain: Domínio para o cookie de sessão. Define os domínios para os quais o cookie de sessão é válido.
  • secure: Define se o cookie deve ser enviado apenas por conexões HTTPS. Quando true, o cookie só será transmitido sobre HTTPS.
  • httponly: Indica se o cookie deve ser acessível apenas via HTTP. Quando true, o cookie não pode ser acessado via JavaScript.
  • samesite: Configura o atributo SameSite do cookie de sessão. Pode ser strict, lax ou none.

Exemplo de configuração avançada:

$app->use(session([
    'lifetime' => 3600, // 1 hora
    'secure' => true, // Apenas HTTPS
    'httponly' => true, // Acesso restrito a HTTP
]));

Estas configurações ajudam a garantir a segurança e a funcionalidade das sessões em seu aplicativo, permitindo uma gestão mais eficiente e personalizada.