Mesma sessão em abas diferentes do navegador

Boa tarde pessoal,

Estou tentando controlar a sessão do usuário para evitar o “roubo” de sessão, ou seja, não permitir depois de logado que o usuário acesse o sistema em abas diferentes.
Andei lendo um monte de coisas na internet e muito gente diz que é impossível mas tem jeito de fazer uma solução manual que seria controlar na mão.

Por favor, alguém tem uma implementação, um exemplo, um algo que possa compartilhar.
Esse é um requisito de segurança num projeto que estou trabalhando, portanto, está difícil de convencer o usuário de que isso é impossível de controlar de maneira trivial.

Obrigado por hora.

Por que a outra aba compartilhar os dados seria um roubo de sessão, se é o mesmo usuário que está utilizando?

Olá Christiano,

Saudações Sul-Matogrossenses para você. Finalmente achei alguem da minha terra aqui no Forum.

Realmente, a solução mais fácil para solucionar o seu problema é convencer o seu cliente de que isso é a coisa mais natural em uma aplicação cliente/servidor com sessão.

Bom fora isso, você pode usar uma idéia de subsessão.
Deixa eu explicar melhor:
1 - Coloque tudo que você precisar manter na sessão em uma Classe, por exemplo MinhaSessão.
2 - Crie um HashMap de MinhaSessão e coloque-o na sessão real de seu ServidorWeb.
3 - Faça todas as suas requisições, originadas de todas as sua páginas exceto da Home, passando como parâmetro um SubSessionId que você pode criar como quiser.
4 - Na Home você não passa esse Id, e durante o processamento do request da Home, você cria esse Id, cria uma instancia do MinhaSessão, usa o id para incluir o MinhaSessão no HashMap, e devolva o id para suas páginas subsequentes sempre reenviá-lo nas próximas requisições.
5 - No processamento das outras páginas você usa o Id passado pelas páginas para obter o MinhaSessão do HashMap.

Pegou a idéia?

Dessa forma, se o usuário abrir uma nova aba e tentar entrar no sistema ele vai receber um novo Id com uma nova Sessão.
Só que se o usuário clicar em um de seus links com o botão direito e mandar abrir em uma nova aba ele irá utilizar o mesmo id e assim vai “roubar” a sessão, pois as duas abas vão usar o mesmo id.

Espero ter ajudado.

[quote=AbelBueno]Por que a outra aba compartilhar os dados seria um roubo de sessão, se é o mesmo usuário que está utilizando?

[/quote]

Bom dia,
Obrigado por responder.
Roubo de sessão foi o termo utilizado pelo cliente na descrição do requisito. Concordo que qdo o usuário faz o login é ele que está utilizando o sistema e portanto, qual o problema de abrir abas?

De qualquer forma preciso implementar algo para minimizar esse “problema”
Se tiver alguma ideia que possa compartilhar, desde já agradeço.

Leu minha responsta anterior, com a idéia?

[quote=maruero]Olá Christiano,

Saudações Sul-Matogrossenses para você. Finalmente achei alguem da minha terra aqui no Forum.

Realmente, a solução mais fácil para solucionar o seu problema é convencer o seu cliente de que isso é a coisa mais natural em uma aplicação cliente/servidor com sessão.

Bom fora isso, você pode usar uma idéia de subsessão.
Deixa eu explicar melhor:
1 - Coloque tudo que você precisar manter na sessão em uma Classe, por exemplo MinhaSessão.
2 - Crie um HashMap de MinhaSessão e coloque-o na sessão real de seu ServidorWeb.
3 - Faça todas as suas requisições, originadas de todas as sua páginas exceto da Home, passando como parâmetro um SubSessionId que você pode criar como quiser.
4 - Na Home você não passa esse Id, e durante o processamento do request da Home, você cria esse Id, cria uma instancia do MinhaSessão, usa o id para incluir o MinhaSessão no HashMap, e devolva o id para suas páginas subsequentes sempre reenviá-lo nas próximas requisições.
5 - No processamento das outras páginas você usa o Id passado pelas páginas para obter o MinhaSessão do HashMap.

Pegou a idéia?

Saudações pantaneiras. E ai amigo? Obrigado pela atenção!
Peguei sim,
Tinha pensando em algo parecido com isso, tem tb o esquema de reescrita de URL que estou estudando.
Vou tentar implementar algo e se tiver alguma dúvida mando novamente.

Dessa forma, se o usuário abrir uma nova aba e tentar entrar no sistema ele vai receber um novo Id com uma nova Sessão.
Só que se o usuário clicar em um de seus links com o botão direito e mandar abrir em uma nova aba ele irá utilizar o mesmo id e assim vai “roubar” a sessão, pois as duas abas vão usar o mesmo id.

Espero ter ajudado.[/quote]