<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 "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 <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&limite=10</code>, PHP automaticamente popula <code>$_GET['termo']</code> com "php" e <code>$_GET['limite']</code> com "10". Esse método é ideal para buscas, paginação e filtros, pois os dados ficam visíveis na URL.</p>
<pre><code class="language-php"><?php
// search.php
if (isset($_GET['termo'])) {
$termo = htmlspecialchars($_GET['termo'], ENT_QUOTES, 'UTF-8');
echo "Você procurou por: " . $termo;
} else {
echo "Nenhum termo de busca fornecido.";
}
?></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"><?php
// login.php
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$email = htmlspecialchars($_POST['email'] ?? '', ENT_QUOTES, 'UTF-8');
$senha = $_POST['senha'] ?? '';
if (empty($email) || empty($senha)) {
echo "Email e senha são obrigatórios.";
} else {
// Validar contra banco de dados (usar password_verify() para senhas)
echo "Processando login...";
}
}
?>
<form method="POST" action="login.php">
<input type="email" name="email" required>
<input type="password" name="senha" required>
<button type="submit">Entrar</button>
</form></code></pre>
<p>Sempre verifique <code>$_SERVER['REQUEST_METHOD']</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"><?php
// autenticacao.php
session_start();
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$usuario_id = 123; // Após validar credenciais
$_SESSION['usuario_id'] = $usuario_id;
$_SESSION['nome'] = 'João Silva';
$_SESSION['login_time'] = time();
header('Location: dashboard.php');
exit;
}
?></code></pre>
<p>Depois, em qualquer página da aplicação:</p>
<pre><code class="language-php"><?php
session_start();
if (!isset($_SESSION['usuario_id'])) {
header('Location: autenticacao.php');
exit;
}
echo "Bem-vindo, " . $_SESSION['nome'];
?></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"><?php
// preferencias.php
if (isset($_POST['tema'])) {
$tema = htmlspecialchars($_POST['tema']);
setcookie('tema', $tema, time() + (365 24 60 * 60), '/');
$_COOKIE['tema'] = $tema;
}
$tema_atual = $_COOKIE['tema'] ?? 'claro';
echo "Tema atual: " . $tema_atual;
?>
<form method="POST">
<select name="tema">
<option value="claro">Claro</option>
<option value="escuro">Escuro</option>
</select>
<button type="submit">Salvar Preferência</button>
</form></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"><?php
setcookie('token', 'abc123',
options: [
'expires' => time() + 3600,
'path' => '/',
'secure' => true, // HTTPS apenas
'httponly' => true, // JavaScript não acessa
'samesite' => 'Strict' // CSRF protection
]
);
?></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>