@SessionScoped
public class CarrinhoPedidoVenda {
private List<CarrinhoItens> listaProdutos = new ArrayList<CarrinhoItens>();
private List<CarrinhoItens> listaServicos = new ArrayList<CarrinhoItens>();
private List<FncParcela> listaParcelas = new ArrayList<FncParcela>();
...
Crio um pedido de venda e salvo, inclusive os itens apenas no final. As listas ficam na sesão.
Fazendo os testes, abrir duas janelas com pedidos difrentes e salvei um deles. Minha surpresa é que a sessão era a mesma.
O problema é que matei os itens de um pedido e dupliquei os do outro.
Alguma sugestão para diferenciar as sessões?
Cinei, isso é o tipo de coisa que realmente acontece apenas em ambiente de testes. Em produção nenhum usuário vai fazer isso, de abrir duas janelas para fazer compras em seu site. E mesmo que ele abra duas janelas será o mesmo cliente, então não vejo um problema nisso.
Não há uma regra que diga isso, mas atualmente com os navegadores em abas eles mantém a mesma session para todos acessos ao site mesmo em abas diferentes, pois o cookie jsessionid é o mesmo para todos. Antigamente o IE tratava diferente isso, mas agora com o infame IE com abas creio que o tratamento deva ser da mesma forma que o Fifefox.
O projeto é para uso corporativo e os usuários de compras estão habituados com sistemas desktop windows e com muti-janelas.
Ainda não sei se devo correr o risco ou não utilizar o recurso em sessões, ou tentar o que o Lucas sugere.
Obrigado mais uma vez pelas respostas
cinei, você tem que avaliar se isso é realmente um problema. Eu não vejo como uma pessoa pode fazer ações distintas com sessões distintas na mesma aplicação, mesmo site e tudo mais. Se às vezes é complicado operar o mouse em um eclipse só imagina em dois, hahahahah. Nesse caso se é o mesmo usuário na mesma aplicação, não vejo o porque de duas sessions diferentes.
Eu tenho um sistema coorporativo e o controle é muito restrito. Um exemplo: eu guardo o histórico dos URIs acessados. Caso o referer for diferente do último URI acessado já desconecto o cara, e por aí vai. É bem para evitar session-hijack e afins. Se precisar do código posso te passar, que na verdade é um interceptor do vraptor3, que há horas quero fazer uma receita de bolo com ele.
[quote=cinei]Pessoa, estou colocando um objeto na sessão:
@SessionScoped
public class CarrinhoPedidoVenda {
private List<CarrinhoItens> listaProdutos = new ArrayList<CarrinhoItens>();
private List<CarrinhoItens> listaServicos = new ArrayList<CarrinhoItens>();
private List<FncParcela> listaParcelas = new ArrayList<FncParcela>();
...
Crio um pedido de venda e salvo, inclusive os itens apenas no final. As listas ficam na sesão.
Fazendo os testes, abrir duas janelas com pedidos difrentes e salvei um deles. Minha surpresa é que a sessão era a mesma.
O problema é que matei os itens de um pedido e dupliquei os do outro.
Alguma sugestão para diferenciar as sessões?
[/quote]
Sessão não é janela. Se vc quer controlar as janelas terá que criar um esquema para isso. O normal é a pessoa usar quantas janelas quiser. A sessão será sempre a mesma.
Pessoal, gostei das respostas e sugestões. Agradeço.
Acabei mudando a forma e abandonando o uso de sesão para este processo. Mas ainda vou voltar a este assunto.
Passei a salvar o pedido ao enviar o primeiro item. Um pouco chato de implementar, mas ficou bom.
Garcia-jj, seria muita gentileza sua disponibilizar o código do interceptor e principalmente publicar no cookbook.