Configurando cookies para serem compartilhados entre subdomínios no PHP

Método para permitir que cookies sejam acessíveis entre subdomínios no PHP, garantindo que as informações do usuário sejam mantidas em diferentes áreas do site.

Introdução

Em aplicações que utilizam múltiplos subdomínios, como app.exemplo.com e painel.exemplo.com, pode ser necessário compartilhar cookies entre eles para manter a autenticação do usuário ou suas preferências. No PHP, isso pode ser feito configurando corretamente o domínio do cookie.

Como configurar cookies para serem compartilhados entre subdomínios

Para permitir que um cookie seja acessível em diferentes subdomínios, precisamos definir o parâmetro domain corretamente:

setcookie('usuario', 'João', [
    'expires' => time() + 3600,
    'path' => '/',
    'domain' => '.exemplo.com',
    'secure' => true,
    'httponly' => true,
    'samesite' => 'None'
]);

Explicação do código:

  • domain => '.exemplo.com': Define que o cookie será acessível por todos os subdomínios de exemplo.com.
  • path => '/': Permite que o cookie seja acessado em qualquer página do site.
  • secure => true: Garante que o cookie só será transmitido por HTTPS.
  • httponly => true: Impede que o cookie seja acessível via JavaScript, protegendo contra ataques XSS.
  • samesite => 'None': Necessário para permitir o compartilhamento do cookie entre subdomínios em navegadores modernos.

Após definir o cookie, podemos acessá-lo em qualquer subdomínio da seguinte maneira:

if (isset($_COOKIE['usuario'])) {
    echo 'Usuário: ' . $_COOKIE['usuario'];
} else {
    echo 'Cookie não encontrado!';
}

Se o cookie foi configurado corretamente, ele estará acessível em todos os subdomínios de exemplo.com.

Problemas comuns ao compartilhar cookies entre subdomínios

  1. Cookies não sendo compartilhados: Certifique-se de que o atributo domain foi configurado corretamente com um ponto (.) antes do domínio.
  2. Cookies não persistindo em navegadores modernos: O atributo SameSite=None é necessário para permitir o compartilhamento de cookies entre subdomínios.
  3. Cookies não sendo enviados por HTTP: Verifique se o site está utilizando HTTPS, pois secure=true impede que o cookie seja transmitido em conexões HTTP inseguras.

Conclusão

Configurar corretamente os cookies no PHP para serem compartilhados entre subdomínios melhora a experiência do usuário e facilita a autenticação única entre diferentes áreas de um site. Com a configuração adequada dos parâmetros de segurança, garantimos um ambiente protegido e funcional.

O compartilhamento de cookies entre subdomínios é uma técnica essencial para aplicações que precisam oferecer uma experiência unificada ao usuário. Sistemas como plataformas SaaS, painéis administrativos e lojas virtuais frequentemente dividem suas funcionalidades em subdomínios distintos, tornando a persistência de login e preferências um fator importante.

Sem uma configuração correta dos cookies, o usuário pode ser forçado a se autenticar novamente ao alternar entre subdomínios, o que prejudica a usabilidade. Além disso, garantir que os cookies sejam seguros é fundamental para evitar vazamento de dados e vulnerabilidades como ataques de interceptação (man-in-the-middle).

O uso dos atributos Secure, HttpOnly e SameSite é uma prática recomendada para reforçar a segurança dos cookies e garantir compatibilidade com os padrões mais recentes dos navegadores. Testar a configuração em diferentes navegadores e dispositivos é essencial para evitar falhas na autenticação entre subdomínios.

Algumas aplicações:

  • Manter o usuário autenticado ao navegar entre diferentes subdomínios.
  • Armazenar preferências do usuário em um único local e acessá-las em diferentes serviços.
  • Facilitar a comunicação entre áreas distintas de uma aplicação web.
  • Reduzir a necessidade de reautenticação ao alternar entre subdomínios.

Dicas para quem está começando

  • Defina o domain com um ponto (.) antes do domínio para permitir o compartilhamento entre subdomínios.
  • Use SameSite=None para compatibilidade com navegadores modernos.
  • Certifique-se de que o site está rodando em HTTPS para evitar problemas com secure=true.
  • Verifique os cookies no navegador utilizando a aba de desenvolvedor (DevTools) para confirmar se foram armazenados corretamente.
  • Evite armazenar informações sensíveis diretamente em cookies, prefira armazenar identificadores e buscar os dados no servidor.

Contribuições de Carla Mendes

Compartilhe este tutorial: Como compartilhar cookies entre subdomínios no PHP?

Compartilhe este tutorial

Continue aprendendo:

Como armazenar múltiplos valores em um único cookie no PHP?

Método para armazenar vários valores dentro de um único cookie no PHP, otimizando o armazenamento de informações do usuário.

Tutorial anterior

Como verificar se um cookie existe antes de acessá-lo no PHP?

Método para verificar a existência de um cookie no PHP antes de acessá-lo, prevenindo erros e garantindo um melhor fluxo na aplicação.

Próximo tutorial