PHP

Boas Práticas de Superglobais em PHP: $_GET, $_POST, $_SESSION e $_COOKIE para Times Ágeis

8 min de leitura

Boas Práticas de Superglobais em PHP: $_GET, $_POST, $_SESSION e $_COOKIE para Times Ágeis

Compreendendo as Superglobais em PHP As superglobais são variáveis especiais em PHP que estão sempre disponíveis em qualquer escopo da aplicação, sem necessidade de declaração. Elas armazenam informações sobre a requisição HTTP, navegador, sessão e cookies do usuário. As principais superglobais são , , e , cada uma servindo a um propósito específico no fluxo de dados da web. Dominar essas estruturas é fundamental para qualquer desenvolvedor PHP, pois elas formam a base da comunicação entre cliente e servidor. A razão pela qual recebem o nome "super" é porque funcionam globalmente — podem ser acessadas de qualquer lugar do seu código, inclusive dentro de funções e classes, sem usar a palavra-chave . PHP popula automaticamente essas variáveis a cada requisição HTTP, tornando-as ferramentas poderosas para manipular dados do usuário, manter estado e controlar fluxos de autenticação. $GET: Capturando Dados pela URL Como Funciona é um array associativo que captura parâmetros enviados na query string da URL. Quando um usuário acessa

<h2>Compreendendo as Superglobais em PHP</h2>

<p>As superglobais são variáveis especiais em PHP que estão sempre disponíveis em qualquer escopo da aplicação, sem necessidade de declaração. Elas armazenam informações sobre a requisição HTTP, navegador, sessão e cookies do usuário. As principais superglobais são <code>$_GET</code>, <code>$_POST</code>, <code>$_SESSION</code> e <code>$_COOKIE</code>, cada uma servindo a um propósito específico no fluxo de dados da web. Dominar essas estruturas é fundamental para qualquer desenvolvedor PHP, pois elas formam a base da comunicação entre cliente e servidor.</p>

<p>A razão pela qual recebem o nome &quot;super&quot; é porque funcionam globalmente — podem ser acessadas de qualquer lugar do seu código, inclusive dentro de funções e classes, sem usar a palavra-chave <code>global</code>. PHP popula automaticamente essas variáveis a cada requisição HTTP, tornando-as ferramentas poderosas para manipular dados do usuário, manter estado e controlar fluxos de autenticação.</p>

<h2>$_GET: Capturando Dados pela URL</h2>

<h3>Como Funciona</h3>

<p><code>$_GET</code> é um array associativo que captura parâmetros enviados na query string da URL. Quando um usuário acessa <code>exemplo.com/search.php?termo=php&amp;limite=10</code>, PHP automaticamente popula <code>$_GET[&#039;termo&#039;]</code> com &quot;php&quot; e <code>$_GET[&#039;limite&#039;]</code> com &quot;10&quot;. Esse método é ideal para buscas, paginação e filtros, pois os dados ficam visíveis na URL.</p>

<pre><code class="language-php">&lt;?php

// search.php

if (isset($_GET[&#039;termo&#039;])) {

$termo = htmlspecialchars($_GET[&#039;termo&#039;], ENT_QUOTES, &#039;UTF-8&#039;);

echo &quot;Você procurou por: &quot; . $termo;

} else {

echo &quot;Nenhum termo de busca fornecido.&quot;;

}

?&gt;</code></pre>

<p><strong>Importante:</strong> Sempre valide e sanitize dados de <code>$_GET</code> antes de usar em queries SQL ou exibir na página. O exemplo acima usa <code>htmlspecialchars()</code> para prevenir XSS. Nunca confie em dados do usuário — essa é a regra de ouro.</p>

<h2>$_POST: Recebendo Dados Sensíveis</h2>

<h3>Diferenças Cruciais com $_GET</h3>

<p><code>$_POST</code> captura dados enviados no corpo da requisição HTTP, não na URL. Isso o torna ideal para formulários que contêm senhas, dados pessoais e informações sensíveis. Os dados não aparecem na URL e oferecem uma camada extra de privacidade, embora ainda precisem de validação rigorosa.</p>

<pre><code class="language-php">&lt;?php

// login.php

if ($_SERVER[&#039;REQUEST_METHOD&#039;] === &#039;POST&#039;) {

$email = htmlspecialchars($_POST[&#039;email&#039;] ?? &#039;&#039;, ENT_QUOTES, &#039;UTF-8&#039;);

$senha = $_POST[&#039;senha&#039;] ?? &#039;&#039;;

if (empty($email) || empty($senha)) {

echo &quot;Email e senha são obrigatórios.&quot;;

} else {

// Validar contra banco de dados (usar password_verify() para senhas)

echo &quot;Processando login...&quot;;

}

}

?&gt;

&lt;form method=&quot;POST&quot; action=&quot;login.php&quot;&gt;

&lt;input type=&quot;email&quot; name=&quot;email&quot; required&gt;

&lt;input type=&quot;password&quot; name=&quot;senha&quot; required&gt;

&lt;button type=&quot;submit&quot;&gt;Entrar&lt;/button&gt;

&lt;/form&gt;</code></pre>

<p>Sempre verifique <code>$_SERVER[&#039;REQUEST_METHOD&#039;]</code> para garantir que a forma correta de requisição foi usada. Isso previne ataques CSRF e erros lógicos. Para senhas, use <code>password_hash()</code> e <code>password_verify()</code> — nunca armazene senhas em texto plano.</p>

<h2>$_SESSION e $_COOKIE: Mantendo Estado Entre Requisições</h2>

<h3>Sessões para Dados Confidenciais</h3>

<p><code>$_SESSION</code> armazena dados no servidor e associa cada usuário a um ID único enviado em um cookie. Isso permite manter estado sem expor informações sensíveis. Para usar sessões, sempre comece a script com <code>session_start()</code>.</p>

<pre><code class="language-php">&lt;?php

// autenticacao.php

session_start();

if ($_SERVER[&#039;REQUEST_METHOD&#039;] === &#039;POST&#039;) {

$usuario_id = 123; // Após validar credenciais

$_SESSION[&#039;usuario_id&#039;] = $usuario_id;

$_SESSION[&#039;nome&#039;] = &#039;João Silva&#039;;

$_SESSION[&#039;login_time&#039;] = time();

header(&#039;Location: dashboard.php&#039;);

exit;

}

?&gt;</code></pre>

<p>Depois, em qualquer página da aplicação:</p>

<pre><code class="language-php">&lt;?php

session_start();

if (!isset($_SESSION[&#039;usuario_id&#039;])) {

header(&#039;Location: autenticacao.php&#039;);

exit;

}

echo &quot;Bem-vindo, &quot; . $_SESSION[&#039;nome&#039;];

?&gt;</code></pre>

<h3>Cookies para Preferências do Usuário</h3>

<p><code>$_COOKIE</code> armazena pequenas quantidades de dados no navegador do cliente. Use para preferências não-sensíveis como tema, idioma ou lembrar email. Cookies devem ser definidos antes de qualquer saída com <code>setcookie()</code>.</p>

<pre><code class="language-php">&lt;?php

// preferencias.php

if (isset($_POST[&#039;tema&#039;])) {

$tema = htmlspecialchars($_POST[&#039;tema&#039;]);

setcookie(&#039;tema&#039;, $tema, time() + (365 24 60 * 60), &#039;/&#039;);

$_COOKIE[&#039;tema&#039;] = $tema;

}

$tema_atual = $_COOKIE[&#039;tema&#039;] ?? &#039;claro&#039;;

echo &quot;Tema atual: &quot; . $tema_atual;

?&gt;

&lt;form method=&quot;POST&quot;&gt;

&lt;select name=&quot;tema&quot;&gt;

&lt;option value=&quot;claro&quot;&gt;Claro&lt;/option&gt;

&lt;option value=&quot;escuro&quot;&gt;Escuro&lt;/option&gt;

&lt;/select&gt;

&lt;button type=&quot;submit&quot;&gt;Salvar Preferência&lt;/button&gt;

&lt;/form&gt;</code></pre>

<p><strong>Diferença chave:</strong> Session é segura (servidor), cookie é visível (cliente). Use sessões para dados confidenciais e cookies apenas para preferências não-sensíveis. Sempre defina flags de segurança: <code>HttpOnly</code> (previne JavaScript), <code>Secure</code> (apenas HTTPS), <code>SameSite</code> (CSRF protection).</p>

<pre><code class="language-php">&lt;?php

setcookie(&#039;token&#039;, &#039;abc123&#039;,

options: [

&#039;expires&#039; =&gt; time() + 3600,

&#039;path&#039; =&gt; &#039;/&#039;,

&#039;secure&#039; =&gt; true, // HTTPS apenas

&#039;httponly&#039; =&gt; true, // JavaScript não acessa

&#039;samesite&#039; =&gt; &#039;Strict&#039; // CSRF protection

]

);

?&gt;</code></pre>

<h2>Conclusão</h2>

<p>Dominar superglobais em PHP é essencial: <strong><code>$_GET</code></strong> captura parâmetros de URL (públicos), <strong><code>$_POST</code></strong> recebe dados sensíveis via formulários, <strong><code>$_SESSION</code></strong> mantém estado confidencial no servidor, e <strong><code>$_COOKIE</code></strong> armazena pequenas preferências no cliente. O principal aprendizado é entender quando usar cada uma — e sempre validar, sanitizar e aplicar medidas de segurança. Implementar essas práticas desde o início economiza horas de debugging e protege seus usuários.</p>

<h2>Referências</h2>

<ul>

<li><a href="https://www.php.net/manual/pt_BR/language.variables.superglobals.php" target="_blank" rel="noopener noreferrer">PHP Manual: Superglobals</a></li>

<li><a href="https://www.php.net/manual/pt_BR/reserved.variables.request.php" target="_blank" rel="noopener noreferrer">PHP Manual: $_GET, $_POST</a></li>

<li><a href="https://www.php.net/manual/pt_BR/book.session.php" target="_blank" rel="noopener noreferrer">PHP Manual: Sessions</a></li>

<li><a href="https://owasp.org/www-community/attacks/xss/" target="_blank" rel="noopener noreferrer">OWASP: Input Validation</a></li>

<li><a href="https://www.php.net/manual/pt_BR/function.setcookie.php" target="_blank" rel="noopener noreferrer">PHP Manual: setcookie()</a></li>

</ul>

Comentários

Mais em PHP

Middlewares em PHP: Interceptando o Ciclo de Requisição na Prática
Middlewares em PHP: Interceptando o Ciclo de Requisição na Prática

O Que São Middlewares e Por Que Importam Middlewares são funções ou classes q...

Boas Práticas de Refatoração em PHP: Técnicas para Melhorar Código Legado para Times Ágeis
Boas Práticas de Refatoração em PHP: Técnicas para Melhorar Código Legado para Times Ágeis

Entendendo Refatoração em PHP Refatoração é o processo de reestruturar código...

Como Usar Webhooks em PHP: Recebendo e Processando Eventos Externos em Produção
Como Usar Webhooks em PHP: Recebendo e Processando Eventos Externos em Produção

O que são Webhooks e Por Que Importam Webhooks são mecanismos de comunicação...