Problema com sessão em servlet

11 respostas
B

Ola pessoal, bom dia.
Estou trabalhando num projeto de autenticação e controle de acesso de usuários, e me surgiu o seguinte problema, quando um usuário se autentica eu gravo uma sessão com os dados de permissões para outras aplicações do sistema, o problema é que cada usuário que se autentica posterior ao primeiro acaba pegando a mesma sessão, como se não fosse criada uma para cada usuário. Como é a primeira vez que trabalho com sessão não sei o que pode esta acontecendo, gostaria de saber se alguem tem alguma ideia, e se possível me dar uma dica de como resolver esse problema, desde já obrigado.

Batista

11 Respostas

G

Fala Batista, tudo bem ?

Coloca aqui como você está fazendo a autenticação dos usuários. Assim podemos tentar te ajudar da melhor forma possível.

B

“JavaPlayer”:
Fala Batista, tudo bem ?

Coloca aqui como você está fazendo a autenticação dos usuários. Assim podemos tentar te ajudar da melhor forma possível.

Meu problema não esta na autenticação está na sessão, a sessão crio desta forma.

String userName = request.getParameter("userName");
String password = request.getParameter("password");

if (login(userName, password)) {

  //send cookie to the browser
  HttpSession session = request.getSession();
  session.setAttribute("logged", Lista);
 //nesta lista comtem as permissoe do usuario

 response.sendRedirect("/Sistema/Menu");


}else{

  sendLoginForm(response, true);

}

Quando chamo o menu ele pega a sessâo assim:

HttpSession session = request.getSession();
 if(session==null){

    response.sendRedirect(loginUrl);

 }else{

    Lista = (Vector)session.getAttribute("logged");
    if(Lista == null){
      response.sendRedirect(loginUrl);
    }else{

      Object usuario = (Object) Lista.get(0);
      vlogin = (String)usuario;

    }//fim do if

 }//Fim do if

é isso ai…

J

E como você sabe que é a mesma?

Você está logando com varios usuarios na mesma maquina? Com qual browser?

B

“jairelton”:
E como você sabe que é a mesma?

Você está logando com varios usuarios na mesma maquina? Com qual browser?

Essa é a minha duvida, o servlet não pega a sessâo automaticamente, ou eu tenho que dizer para ele pegar a sessão que foi criada na autenticação.

pelo que entendi ao ler alguns assuntos ele deveria pegar automaticamente em cada browse que cria a sessão…?

Estou usando o internet explorer.

J

Como assim “pega automaticamente”?

Tente logar em browsers diferentes e veja se ele muda a sessão…

E como é que você sabe que é igual?

B

“jairelton”:
Como assim “pega automaticamente”?

Tente logar em browsers diferentes e veja se ele muda a sessão…

E como é que você sabe que é igual?

é isso que estou fazendo eu logo com outro usuario, gravo permissoes para aquele usuario so que ele pegar as permissoe do primeiro usuario que logou isso é que não consigo entender como ele esta fazendo isso…

J

Como você seta essas permissões?

B

Cada usuário esta gravado em um banco mysql. Quando autentico o usuário, pego ás permissões dele e coloco em uma lista, essa lista gravo na sessão, e redireciono o usuario para a tela principal do sistema, la quando o usuário for entrar em qualquel opção pego a lista da sessão e obtenho as permissoe para a opcao que o usuario escolheu, caso ele não tenha permisão trago uma mensagem que ele nao pode acessar aquele menu, caso contrario redireciona para opcao desejada…

é isso ai…

J

Confira então essa lista antes e depois de coloca-la na sessão, provavelmente há algum erro na criação dessa lista, ou quando você faz a verificação da permissão… não na sessão, faça um teste por exemplo, colocando um valor qualquer (String) na sessão e depois pegue ele e veja se é diferente… com certeza será!

B

Eu vou conferir, mas tenho certeza que estavindo corretamento do banco, so se o problema for quando estou criando asessao, em vez de criar mantem a mesma vou fazer alguns testes para tentar descobrir, obrigado mesmo assim…

B

Obrigado já descrobri onde estava o erro…

Eu criava uma lista com Vector() desta forma,
Vector Lista = new Vector();

Acontecia o seguinte, conforme os usuarios iam logando eu gravava as permisões deles nessa lista, só que deveria ser uma lista para cada usuario que logasse, o que acontecia era que essa lista estava sendo incrementada com as permissoes dos usuarios que iam logando, como eu sempre pegava as 5 posicoe da lista, sempre vinha as informacoes do primeiro usuario que logou. Para resolver o problema fiz assim, para criar a lista.

Vector Lista = null;
Lista = new Vector();

Ai adiciono as permissoes do usuario, assim toda vez que um usuario logar, a lista sempre ta vazia.

É isso ai…

Criado 25 de julho de 2006
Ultima resposta 25 de jul. de 2006
Respostas 11
Participantes 3