DEV Community

João Vitor
João Vitor

Posted on

O PHP como uma linguagem stateless

Se você já mexeu com PHP ou desenvolvimento web, provavelmente já ouviu falar em stateless. Mas o que isso significa? E por que é tão importante?

Para começar, podemos perguntar: O que é stateless?

Stateless quer dizer "sem estado". Traduzindo: o servidor não guarda informações sobre o que aconteceu antes. Cada requisição é independente, como se fosse a primeira. No PHP, isso significa que, quando um script roda, ele faz o que precisa fazer, manda a resposta para o navegador e... acabou! Na próxima requisição, ele começa do zero, sem lembrar de nada.

Isso não significa que seja ruim. Na verdade, tem algumas vantagens, e com o PHP existe um jeito de contornar isso quando precisamos guardar informações (como login ou carrinho de compras).

Então, como o PHP lida com o stateless?

O PHP é stateless por natureza, mas ele tem algumas "gambiarras" na manga para guardar informações entre uma requisição e outra.
As principais são:

  1. Sessões: Guardam dados no servidor e usam um cookie no navegador para identificar o usuário.
  2. Cookies: Armazenam informações diretamente no navegador do usuário.
  3. Banco de Dados: Para coisas mais permanentes, como dados de usuários ou pedidos.

Mas realmente tem vantagens nisso?

  1. Escalabilidade:

    • Como cada requisição é independente, é fácil distribuir o trabalho entre vários servidores. Isso é ótimo para aplicações que precisam crescer.
  2. Simplicidade:

    • Não precisa ficar gerenciando estado o tempo todo. Cada requisição é tratada de forma isolada, o que facilita a vida do desenvolvedor.
  3. Confiabilidade:

    • Se um servidor cair, outro pode assumir sem problemas, já que não há estado a ser recuperado.
  4. Facilidade de Cache:

    • Requisições stateless são mais fáceis de armazenar em cache, o que melhora o desempenho.
  5. Compatibilidade com APIs RESTful:

    • APIs REST são stateless por natureza, então o PHP se encaixa perfeitamente nesse modelo.

É aqui que o filho chora e mãe não vê, as desvantagens que vem junto do Stateless no PHP

  1. Precisa Gerenciar Estado Manualmente:

    • Para coisas como login ou carrinho de compras, você precisa usar sessões, cookies ou banco de dados. Isso pode dar um pouco mais de trabalho.
  2. Overhead de Comunicação:

    • Em cada requisição, você pode precisar enviar informações extras (como cookies), o que pode aumentar o tráfego de rede.
  3. Não é Ideal para Tempo Real:

    • Se você precisa de algo em tempo real (como um chat), o modelo stateless pode não ser o melhor. Usar WebSockets são mais indicados nesses casos.

Alguns exemplos de como utilizar sessão no PHP

  1. Usando Sessões no PHP Sessões são super úteis para guardar informações entre requisições.
<?php
// Inicia a sessão
session_start();

// Guarda o nome do usuário na sessão
$_SESSION['usuario'] = 'João';

// Recupera o nome da sessão
echo "Bem-vindo, " . $_SESSION['usuario'];
?>
Enter fullscreen mode Exit fullscreen mode

Nesse mini script acima, o nome do usuário é guardado na sessão e pode ser recuperado em outras páginas.


  1. Usando Cookies no PHP Cookies são outra forma de guardar informações, mas no navegador do usuário.
<?php
// Cria um cookie que expira em 1 hora
setcookie('usuario', 'João', time() + 3600);

// Recupera o valor do cookie
if (isset($_COOKIE['usuario'])) {
    echo "Bem-vindo, " . $_COOKIE['usuario'];
} else {
    echo "Cookie não definido.";
}
?>
Enter fullscreen mode Exit fullscreen mode

  1. Autenticação com Sessões Um exemplo clássico é o sistema de login:
<?php
session_start();

// Simulação de login
if ($_POST['usuario'] === 'admin' && $_POST['senha'] === '1234') {
    $_SESSION['logado'] = true;
    $_SESSION['usuario'] = 'admin';
    echo "Login bem-sucedido!";
} else {
    echo "Credenciais inválidas.";
}

// Verifica se o usuário está logado
if (isset($_SESSION['logado']) && $_SESSION['logado'] === true) {
    echo "Bem-vindo, " . $_SESSION['usuario'];
}
?>
Enter fullscreen mode Exit fullscreen mode

  1. Carrinho de Compras com Sessão Um carrinho de compras é um ótimo exemplo de algo que precisa de estado, afinal, ninguém quer ter o carrinho esvaziado em cada atualização da página:
<?php
session_start();

// Adiciona um produto ao carrinho
if (isset($_POST['produto'])) {
    $_SESSION['carrinho'][] = $_POST['produto'];
}

// Mostra o carrinho
if (!empty($_SESSION['carrinho'])) {
    echo "Carrinho de Compras:";
    foreach ($_SESSION['carrinho'] as $produto) {
        echo "<li>" . htmlspecialchars($produto) . "</li>";
    }
} else {
    echo "Carrinho vazio.";
}
?>
Enter fullscreen mode Exit fullscreen mode

Conclusão

O PHP é stateless por padrão, o que traz várias vantagens, como escalabilidade e simplicidade. Mas, quando precisamos guardar informações (como login ou carrinho de compras), é só utilizar as sessões, cookies ou banco de dados e tudo se resolve.

Top comments (0)