Solucionado (ver solução)
Solucionado
(ver solução)
12
respostas

Escopo Sessao - Aula 12 - Curso Spring MVC I

Fiz as alterações nas classes 'CarrinhoCompras' e 'CarrinhoComprasController' adicionando em cada uma delas, respectivamente:

@Scope(value=WebApplicationContext.SCOPE_SESSION)

e

@Scope(value=WebApplicationContext.SCOPE_REQUEST)

Acontece que continuo tendo problemas quando abro vários navegadores, a quantidade de itens do carrinho é sempre a mesma em todos eles. Alguém poderia me ajudar?

12 respostas

Olá Cristiano, tudo bem?

Fiquei com uma dúvida, quando você diz que abriu vários navegadores, seriam outras abas no mesmo navegador ou seriam realmente diferentes navegadores? Caso não tenha ainda tentado abrir em diferentes browsers, acredito que isso possa resolver, uma vez que a sessão será diferente em cada browser.

Espero ter ajudado!

Abs

Olá Rafael, tudo ótimo e com você?

Desculpe, me esqueci de explicar mais detalhadamente. Estou utilizando apenas o Google Chrome, abri diversas abas e também diversas janelas, mas o sintoma acontece em ambas as formas, o contador de itens do carrinho é o mesmo em todas as abas e janelas. Grato pela atenção até o momento.

Olá Cristiano, tudo bem também obrigado,

Me parece que mesmo usando diversas janelas o Chrome está mantendo a mesma sessão. Você conseguiria fazer um teste sendo um cliente no Chrome e outro cliente em um browser diferente, por exemplo, Firefox?

Espero que dê certo!

Abs

Testei abrindo uma janela no navegador Microsoft Edge e outra no Google Chrome. Dessa forma funcionou beleza, a quantidade de itens do carrinho no navegador Edge ficou diferente da quantidade de itens do carrinho no navegador Chrome. Existe alguma solução para mudar esse comportamento do navegador Chrome? Grato mais uma vez.

Olá Cristiano, tudo bem?

Na verdade, eu deveria reescrever minha frase anterior, do jeito que escrevi parece que é um problema do Chrome, desculpe. O que acontece seria que quando fazemos uma requisição para o servidor, abrimos uma sessão e um browser identifica uma sessão, mesmo que ele esteja em abas diferentes ou janelas diferentes ainda é a mesma instância, a mesma sessão. Não seria um problema do Chrome, Firefox ou IE, a comunicação é feita dessa forma. Quando abrimos um browser diferente, temos uma nova instância, ou seja, uma nova sessão com meu servidor, sendo um outro cliente.

Para poder verificar seu número de sessão, clique com o botão direito do mouse em inspecionar. 1. No Chrome vá na Aba applications e procure na aba esquerda os Cookies. Clicando na opção referente a requisição, devemos ver na aba principal a direita o número de sessão. Agora abra outro aba ou outra janela do Chrome e repita novamente os passos.

Tente fazer o mesmo passo acima para outro browser e veja que os números de sessão serão iguais entre eles, mas diferente dos números de sessão no Chrome.

Espero ter ajudado!

Abs

Bom dia, tudo bem Rafael? Entendi o q vc pediu pra eu fazer, fiz e o comportamento foi o esperado que vc relatou. Mas ainda estou com a dúvida, o propósito do "scope" "session" não seria evitar que, se tratando de um mesmo navegador como por exemplo o Chrome, crie apenas uma sessão mesmo abrindo várias abas ou janelas, criando assim uma sessão diferente para cada nova aba e/ou janela? Abs

Olá Cristiano, tudo bem?

O propósito do escopo de sessão seria na verdade vincular operações respectivas a um determinado cliente. A aplicação consegue identificar cada usuário através daquele número de sessão que discutimos antes, é através desse número que a aplicação identifica que eu sou o usuário Rafael.Por exemplo, quando estamos em uma loja virtual, queremos que o carrinho de compras seja vinculado a somente as minhas compras, pois do contrário poderíamos ter no meu carrinho, itens de um outro usuário, o que não teria sentido. Como a aplicação pode saber que eu sou o usuário Rafael? Através do meu número de sessão. Quando eu coloco escopo de sessão, os parâmetros serão válidos enquanto eu Rafael estiver logado na aplicação, não importa que seja em outra aba ou outra janela, foi o mesmo browser que iniciou a sessão com o servidor, por exemplo você já fez alguma compra em uma loja virtual, abriu outra aba dessa loja virtual e seu carrinho de compras continuava igual? Isso porque é a mesma sessão, é o mesmo browser que iniciou a sessão com o meu servidor. Agora se eu abro outro browser é como se fosse um outro cliente que abre uma nova sessão com meu servidor, por isso ele vai ter um número diferente do primeiro. No curso fazemos essa simulação em dois browsers, porque estamos testando nossa aplicação no mesmo computador e a forma que temos de testar 2 clientes diferentes no mesmo computador é usando dois browsers diferentes, pois aí a sessão deles será diferente e a aplicação interpretará como sendo dois clientes distintos.

Consegui ajudar?

Abs

Boa tarde Rafael. Obrigado pela sua atenção e com certeza ela foi muito valiosa. Eu só fiquei meio perdido pois na vídeo aula do curso, o Paulo abriu mais de uma janela do mesmo navegador e os contadores de itens do carrinho eram diferentes comparando as duas janelas após essa implementação do scope session. Por isso minha duvida. Grato mais uma vez. Abs

solução!

Olá Cristiano,

Vi o vídeo do Paulo, o que ele fez foi acessar o novo browser em modo anônimo, isso também caracterizaria uma nova sessão, um novo cliente ;) Então resumindo, se for fazer o teste, utilizar dois browsers diferentes ou se for no mesmo browser usar um no modo anônimo e outro no modo convencional.

Abs

Bom dia, Rafael. Bacana, então foi isso. Esclareceu minha dúvida. Muito obrigado pela atenção Rafael. Abs

Bom dia Cristiano,

De nada :) Pode contar sempre conosco. Eu vou colocar o tópico como solucionado, ok?

Abs

Bom dia. Estava com o mesmo problema. Apliquei a solução e funcionou. Obrigado pela ajuda!