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.

Heroku

Build apps, not infrastructure.

Dealing with servers, hardware, and infrastructure can take up your valuable time. Discover the benefits of Heroku, the PaaS of choice for developers since 2007.

Visit Site

Top comments (0)

A Workflow Copilot. Tailored to You.

Pieces.app image

Our desktop app, with its intelligent copilot, streamlines coding by generating snippets, extracting code from screenshots, and accelerating problem-solving.

Read the docs