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 $_GET, $_POST, $_SESSION e $_COOKIE, 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 global. 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
$_GET é um array associativo que captura parâmetros enviados na query string da URL. Quando um usuário acessa exemplo.com/search.php?termo=php&limite=10, PHP automaticamente popula $_GET['termo'] com "php" e $_GET['limite'] com "10". Esse método é ideal para buscas, paginação e filtros, pois os dados ficam visíveis na URL.
<?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.";
}
?>
Importante: Sempre valide e sanitize dados de $_GET antes de usar em queries SQL ou exibir na página. O exemplo acima usa htmlspecialchars() para prevenir XSS. Nunca confie em dados do usuário — essa é a regra de ouro.
$_POST: Recebendo Dados Sensíveis
Diferenças Cruciais com $_GET
$_POST 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.
<?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>
Sempre verifique $_SERVER['REQUEST_METHOD'] para garantir que a forma correta de requisição foi usada. Isso previne ataques CSRF e erros lógicos. Para senhas, use password_hash() e password_verify() — nunca armazene senhas em texto plano.
$_SESSION e $_COOKIE: Mantendo Estado Entre Requisições
Sessões para Dados Confidenciais
$_SESSION 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 session_start().
<?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;
}
?>
Depois, em qualquer página da aplicação:
<?php
session_start();
if (!isset($_SESSION['usuario_id'])) {
header('Location: autenticacao.php');
exit;
}
echo "Bem-vindo, " . $_SESSION['nome'];
?>
Cookies para Preferências do Usuário
$_COOKIE 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 setcookie().
<?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>
Diferença chave: 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: HttpOnly (previne JavaScript), Secure (apenas HTTPS), SameSite (CSRF protection).
<?php
setcookie('token', 'abc123',
options: [
'expires' => time() + 3600,
'path' => '/',
'secure' => true, // HTTPS apenas
'httponly' => true, // JavaScript não acessa
'samesite' => 'Strict' // CSRF protection
]
);
?>
Conclusão
Dominar superglobais em PHP é essencial: $_GET captura parâmetros de URL (públicos), $_POST recebe dados sensíveis via formulários, $_SESSION mantém estado confidencial no servidor, e $_COOKIE 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.