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.
Por que compartilhar sessões entre subdomínios no PHP é importante?
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