Dúvida com Session [Resolvido]

21 respostas
klarq

Galera,

Eu tenho uma lista de nomes que coloco na session e todos os usuários vêem esta lista de nomes mesmo que não foram eles que colocaram na session, é assim mesmo, porque eu queria que cada usuário fizesse sua lista de nome e não que todos acessacem a mesma lista de nome!!!

:?: :?: :?: :?:

21 Respostas

Fabricio_Cozer_Marti

sim, sessão está vinculado a um usuário !

klarq

Sim, era isso que eu pensava, mas se eu abrir a página por exemplo vejo o que outro usuário carregou na session, isso é normal?

Fabricio_Cozer_Marti

não é normal, uma sessão é criado pra cada cliente, pense no exemplo clássico de carrinhos de compra, é um carrinho pra cada usuário, e esse carrinho é um atributo no escopo de sessão, verifique se você não está compartilhando de maneira equivocada essa sessão. …

M

Não é normal não
como vc criou este session ?

veja o caminho
HttpServletRequest req
req.getSession().setAttribute(“sesion_user”, Algum Objecto )

klarq
Não é normal não como vc criou este session?

Normal, da maneira que eu sempre fiz:

ArrayList naCaixar = new ArrayList();
viewForm.setFuncionariosNaCaixa(naCaixa);

request.getSession().setAttribute("indexViewForm", viewForm);
M

Quando vc diz q vários usuários vêem esta lista, é na mesma máquina e instancia do seu browse ?
O session esta atrelado ao seu browser, se vc fez um esquema de logon no seu sistema, e estiver testando isto no seu browse, sempre q vc sair de um usuário e entrar novamente com outro, vai estar lá mesmo as informações do session.

klarq

São máquinas diferentes, já instâncias eu não sei… :roll:

klarq

Galera, alguém sabe me dizer…

D

Opa…

Como é esse objeto que você está guardando na sessão?

Estas informações que estão aparecendo em sessões diferentes, não são atributos estáticos né? :wink:

[]´s
Diego

klarq

É um simples ArrayList...

ArrayList naCaixa = null;
naCaixa = (ArrayList) request.getSession().getAttribute("caixa");

if (naCaixa == null)
	naCaixa =  new ArrayList();

viewForm.setFuncionariosNaCaixa(naCaixa);
request.getSession().setAttribute("indexViewForm", viewForm);

E o indexViewForm vai pro html... O que será?!!!

D

Certo… e dentro deste objeto viewForm…
Como está a declaração do atributo que o método setFuncionariosNaCaixa popula? Este atributo não é estático?

[]´s
Diego

klarq

diego.accioly:
Certo… e dentro deste objeto viewForm…
Como está a declaração do atributo que o método setFuncionariosNaCaixa popula? Este atributo não é estático?

Ta declarado assim:

private ArrayList funcionariosNaCaixa = null;

Eu quero colocar no bean porque estou utilizando struts, inclusive esse é o problema: coloquei o bean na session e esse bean aparece para todos iguais, será que eu não posso colocar o bean na session? Será que eu teria que criar uma String[] para colocar na session? Ou o que?

J

Hummm tem Struts na jogada…confirme se os beans não estão sendo guardados no nível de Aplicação ao invés de sessão.

Lembre, pela ordem os níveis:

Aplicação
Sessão
Requisição
Página

klarq

E como eu vejo isso?

J

Verifique no arquivo XML onde estão listados as actions e forms, lá tem uma propriedade scope, veja se não tem nada lá escrito application.

klarq

Todos estão com scope=“request”… :cry:

klarq

E é o seguinte viu galera: o problema é o bean mesmo, porque coloquei uma string na session e apareceu só para um usuário…!

Agora será o bean do struts fica assim mesmo?

J

Bom, então acho que estamos diante de um problema de comunicação da sua dúvida e os nossos "achismos".

Vou tentar construir o cenário da sua dúvida.

Abro uma instância do IE no meu PC, conecto no sistema e acesso uma página onde é listado o conteúdo de um ArrayList gerado na sessão.

Vou para outro PC lá na outra sala do prédio (:D) e abro uma instância do IE, conecto no sistema e acesso a mesma página onde é listado o mesmo conteúdo do ArrayList, é isso?

Bom, até aqui nada de anormal, visto que a cada chamada da tela é feito isso, então TODOS os usuários verão o que está na sessão da sua instância do seu navegador, certo?

Analise o seu exemplo:

ArrayList naCaixa = null;
 naCaixa = (ArrayList) request.getSession().getAttribute("caixa");
 
 if (naCaixa == null)
 	naCaixa =  new ArrayList();
 
 viewForm.setFuncionariosNaCaixa(naCaixa);
 request.getSession().setAttribute("indexViewForm", viewForm);

Se a cada chamada da página você fizer exatamene o que está descrito acima, com certeza os valores sempre serão os mesmos, independente de fazer isso num mesmo PC ou diferente pois você está passando para viewForm.setFuncionariosNaCaixa sempre o cara lido da sessão.

Eu não sei o que você está fazendo dentro de setFuncionariosNaCaixa mas com certeza, pra aparecerem valores diferentes para cada usuário, faz-se necessário algo que diga que é outro usuário conectado, entendes o que eu quero dizer?

Pelo seu exemplo eu estou entendendo isso, posso estar enganado.

Se você ainda não entendeu o que eu quis dizer, coloque aqui o conteúdo completo da sua classe.

klarq

Vocês não vão acreditar se eu disser… :oops:

Eu estava declarando a variável no html com <%! %>

hehehehehe :wink: :? :oops: :shock: :x

Era isso :lol:

J

AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA !!!

ME DÁ UMA PÁ PRA EU DAR NA TESTA DESSE INDIVÍDUO !!

:x :evil: :twisted: :shock:

JESUS !!

Bom, isso acontece !!!

brunoGama

tu quer compartilhar os beans de todos os usuários e que eles sejam visualizaddos pelos memso?! tá meio confuso esse teu paradigma.

Criado 5 de abril de 2006
Ultima resposta 17 de abr. de 2006
Respostas 21
Participantes 6