Problemas com "sessão"

6 respostas
C

Pessoal, gostaria de saber qual a melhor forma de efetuar um LOGIN em uma pagina web e manter a sessao desse login até que o usuario efetue o LOGOUT. Estou fazendo da seguinte maneira:

  1. Servlet que busca no banco usuario e senha e faz a validação do mesmo:
if(rs.next())
      {
        usuarioNome = rs.getString("nome");

        // passa sessao validando usuario
        sessao.setAttribute("login","valido");
  1. pagina .jsp que vai verificar a validação
<jsp:useBean id="login" scope="session" class="java.lang.String" />

Até aqui tudo bem, o problema é quando eu mudo de página pois ela “perde” a sessao. Detalhe, ela so “perde” depois que faz algum acesso a uma servlet, pois quando roda apenas em .jsp continua mantendo a sessao.
Por favor, me ajudem a fazer a permanência dessa sessão !

Obrigado,
JP

6 Respostas

Bani

Deve ter algo de errado em alguma outra parte do seu código que manipula o objeto da sessao.
Sugiro que você verifique todos os lugares em que está utilizando o objeto HttpSession para procurar o erro, especialmente o lugar em que você atribui o objeto a essa variável “sessao”.

Teoricamente, funcionaria.

D

Ta mas o simples fato de eu ir de uma pagina jsp para um servlet e meu servlet nao extender HttpSession , eu perco a minha sessao ???ou nao tem nada a ver?? ele continua na sessao ??

Obrigado!

N

Se você não está utilizando SSL, cookies, ou URL rewrite, você pode estar perdendo sua sessão entre requests ao Web server.

Para evitar problemas use sempre url rewrite da seguinte forma:

...
   mytarget = response.encodeURL(request.getContextPath() + "/mytarget");
   ...

Onde response é o seu HttpServletResponse no seu servlet.

Extraído do tutorial web services:

Para utilizar esse recurso em seus JSP’s utilize algo como:

<%
response.encodeURL ("/store/catalog");
%>

IMPORTANTE: extraído de sites do Websphere:

duardor

Ae net_sandro
Mas ele tah utilizando variaveis no servidor no escopo de sessão, do objeto HttpSession , nao acredito que usar encodeURL e encodeRedirectURL vá resolver…

C

Olha, tentei mudar a maneira de fazer o LOGIN da seguinte forma: Dentro do meu metodo doPost eu chamo outro metodo Autenticar que vai validar, ou não o usuario:

if(Autenticar(email,senha,con))
      {
        sessao.setAttribute("autenticado",new Boolean(true));

Esse método tem a seguinte implementação:

private boolean Autenticar(String email,String senha,Connection con) throws SQLException
  {
    boolean b = false;

    PreparedStatement pst = con.prepareStatement(LOGIN);
    pst.setString(1,email);
    pst.setString(2,senha);

    ResultSet rs = pst.executeQuery();
    if (rs.next())
    {
      b = true;
    }
    return b;
  }

minha pagina .jsp reconhece o objeto passado na sessao dessa forma:

<%
  Boolean autenticado = (Boolean)session.getAttribute("autenticado");
  if(autenticado == null)
    autenticado = Boolean.FALSE;

  if(!autenticado.booleanValue())
  {
    out.println("nao autenticado");
    .....
%>

O que ocorre é que so funciona para a pagina que fez a requisição de Login, pois quando eu “mudo” de página a sessão é perdida ! Será que eu deveria continuar passando o objeto como true para todas as outras paginas reconhecerem-no ?

Preciso de ajuda pessoal !

duardor

Kra nao tem logica
como esta a configuracao do timenout da sessao no seu deployment descriptor?

Criado 25 de junho de 2003
Ultima resposta 26 de jun. de 2003
Respostas 6
Participantes 5