Nesta construção de balanceamento, cada solicitação pode (e provavelmente será) respondida pelo outro servidor, portanto o cookie do navegador contendo o sessionid é sobrescrito em cada solicitação-sequência de login e a sessão parece ser sempre inválida.
Existem várias formas de contornar este problema:
-
Se usar
stickysessions
for uma opção, você poderá usar esse sistema simples para garantir que os usuários sempre sejam manipulados pelo mesmo servidor (contanto que ele esteja ativo e o cookie seja válido). A desvantagem é: quando o servidor morre, o usuário precisa fazer o login novamente. link -
Se perder uma sessão estiver totalmente fora de questão, verifique se os aplicativos nos dois servidores sempre conhecem todos os logins / sessões. Assim, você poderia usar um back-end de banco de dados (ou até mesmo salvar essas informações em um armazenamento central como arquivos) para salvá-las e validar cada solicitação em relação a essas sessões armazenadas em db. A desvantagem é a troca de servidor em todas as outras solicitações, o que mata a eficiência do armazenamento em cache no lado do servidor.
-
combine as duas tentativas para permitir o armazenamento em cache eficiente: as solicitações subsequentes sempre são tratadas pelo mesmo servidor (sessões persistentes) e quando um servidor falha, o outro assume e reconstrói a sessão a partir do backend da sessão. O armazenamento em cache deve ser refeito neste momento, desde que você não use uma abordagem compartilhada do memcached ou semelhante.