Problemas com "sessão"

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

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.

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!

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:

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…

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 !

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