O Tomcat oferece algum controle sobre o caminho do cookie de sessão com o parâmetro de contexto sessionCookiePath , mas não o suficiente para as suas necessidades. Eu acredito que você pode jogar rápido e solto com o servidor (container servlet) e o navegador com muito pouco código.
Em suma, escreva um filtro de servlet que permita a entrada, inalterada. Quando a resposta sair, adicione o caminho do servlet ao caminho do cookie JSESSIONID e deixe o navegador enviar um JSESSIONID diferente (assim, usando uma sessão diferente) para cada servlet.
Veja como funciona:
- Quando uma solicitação é enviada pela primeira vez, ela fica "nua", não tem nenhum cookie associado a ela. Não tem sessão.
- O servidor criará um e associará um
JSESSIONID
a ele e adicionará um cookie para permitir que o cliente faça sua parte no rastreamento. - O cliente ainda está aguardando sua solicitação inicial neste momento.
- No filtro de servlet (ou mod_rewrite), adicione o caminho do servlet ao caminho do cookie.
- Envie a resposta para o cliente.
Com o cookie personalizado para servlet /dir1
, quando o navegador enviar uma solicitação para /dir2
, ele também estará "nu", sem cookies. Uma nova sessão será criada, o filtro adicionará o caminho a ela e assim por diante ...
Do ponto de vista do servidor, existem dois clientes (com o mesmo IP). Um está sempre usando /dir1
servlet e o outro está usando apenas /dir2
servlet. Nada de errado com isso.
Aqui está uma implementação de filtro que pode dar uma vantagem . Você também pode considerar fazê-lo no Apache com mod_headers .