Compartilhando sessões entre subdomínios no PHP

Método eficiente para compartilhar sessões entre subdomínios no PHP e manter o usuário autenticado em toda a aplicação.

Introdução

Ao desenvolver aplicações web com múltiplos subdomínios (ex: app.exemplo.com e painel.exemplo.com), pode ser necessário compartilhar sessões para que o usuário não precise se autenticar novamente em cada subdomínio. O PHP permite essa configuração com ajustes simples nas sessões e cookies.

Configurando o compartilhamento de sessões

Para compartilhar sessões entre subdomínios, precisamos definir corretamente o session.cookie_domain e garantir que o ID da sessão seja o mesmo para todos os subdomínios.

Configuração no php.ini

No servidor, adicione a seguinte configuração no php.ini:

session.cookie_domain = ".exemplo.com"

Essa configuração permite que todos os subdomínios de exemplo.com compartilhem a mesma sessão.

Configuração no código PHP

Se não puder alterar o php.ini, configure o domínio do cookie manualmente antes de iniciar a sessão:

session_set_cookie_params([
    'lifetime' => 0,
    'path' => '/',
    'domain' => '.exemplo.com',
    'secure' => true,
    'httponly' => true,
    'samesite' => 'None'
]);
session_start();

Explicação do código:

  • domain => '.exemplo.com': Permite que todos os subdomínios acessem a sessão.
  • secure => true: Garante que a sessão só seja transmitida via HTTPS.
  • httponly => true: Impede acesso ao cookie via JavaScript.
  • samesite => 'None': Necessário para compartilhamento de cookies entre domínios diferentes.

Garantindo que o mesmo ID de sessão seja usado

Se os subdomínios estiverem usando diferentes servidores, pode ser necessário armazenar sessões em um banco de dados ou Redis para garantir consistência. Exemplo de configuração para armazenamento no banco de dados:

session_set_save_handler(new MinhaClasseDeSessao(), true);
session_start();

Aqui, MinhaClasseDeSessao() é uma classe personalizada que gerencia sessões no banco de dados, garantindo que todos os subdomínios acessem os mesmos dados.

Conclusão

O compartilhamento de sessões entre subdomínios no PHP é essencial para oferecer uma experiência fluida ao usuário. Com as configurações corretas nos cookies e no armazenamento da sessão, podemos garantir um login único e seguro em toda a aplicação.

Em muitas aplicações empresariais e SaaS, é comum dividir funcionalidades entre diferentes subdomínios, como dashboard.exemplo.com para administração e api.exemplo.com para integrações. Para proporcionar uma experiência contínua ao usuário, é fundamental permitir que as sessões sejam compartilhadas entre esses ambientes.

Uma abordagem eficaz é configurar corretamente os cookies e, se necessário, utilizar um banco de dados ou serviço como Redis para armazenar sessões de forma centralizada. Isso evita problemas como a necessidade de múltiplos logins e inconsistências entre os subdomínios. Além disso, garantir que os cookies sejam seguros e compatíveis com restrições modernas do navegador é essencial para evitar falhas e problemas de autenticação.

Com uma configuração bem planejada, podemos criar sistemas escaláveis e seguros, oferecendo um fluxo de autenticação contínuo para os usuários em toda a plataforma.

Algumas aplicações:

  • Permitir login único entre diferentes partes de um sistema (SSO).
  • Evitar que o usuário tenha que se autenticar várias vezes em subdomínios diferentes.
  • Garantir consistência de dados entre serviços internos.
  • Melhorar a experiência do usuário em plataformas web complexas.

Dicas para quem está começando

  • Defina session.cookie_domain corretamente para compartilhar sessões.
  • Sempre utilize HTTPS ao compartilhar sessões entre subdomínios.
  • Evite armazenar informações sensíveis diretamente na sessão.
  • Se necessário, armazene as sessões em um banco de dados para maior consistência.
  • Teste em diferentes navegadores para garantir que os cookies funcionam corretamente.

Contribuições de Carla Mendes

Compartilhe este tutorial: Como compartilhar sessões entre diferentes subdomínios no PHP?

Compartilhe este tutorial

Continue aprendendo:

Como impedir que sessões fiquem ativas após o logout no PHP?

Aprenda as melhores práticas para destruir sessões corretamente após o logout no PHP e evitar acessos indesejados.

Tutorial anterior

Como configurar sessões para serem armazenadas no banco de dados no PHP?

Passo a passo para configurar sessões no PHP utilizando banco de dados para garantir persistência e segurança.

Próximo tutorial