JSP (Java Server Page) - Porque se pierde la sesión?

   
Vista:

Porque se pierde la sesión?

Publicado por flor (1 intervención) el 13/08/2009 19:13:43
Hola,
Estoy liada con un proyecto en JSP y las sesiones a ver si me podeis ayudar.
Tengo el siguiente archivo:

esqueindex.jsp (llamado así porque contiene el esqueleto del sitio web). Este archivo si existe una sesión muestra en la capa "sesion" un mensaje de bienvenida y si no muestra en la misma capa dos campos usuario y contraseña para identificarse.

Os muestro parte del código de esqueindex.jsp:

<%@ page language="java" import="bd.*" %>

<%

HttpSession sesion=request.getSession(true);
Usuario usuario=(Usuario)sesion.getAttribute("usuario");
%>


<html xmlns="http://www.w3.org/1999/xhtml">

<body onload="obtenerid('contenedor_menu')">


las 4 lineas siguientes son solo para depurar:
<script language="javascript">
if (<%=usuario%>==null)
alert ("usuario nulo");
</script>

<% if (usuario == null) {

%>
<div id="sesion">
<form id="formu" name="formu" method="post" action="login/comprobarUsuario.jsp">
<label><span class="navText">
usuario:
</span> <input name="usuario" type="text" id="usuario" size="8" maxlength="8" />
</label>
<label><span class="navText">password:</span>
<input name="password" type="password" id="password" size="8" maxlength="4" />
</label>
<input name="enviar" type="submit" class="navText" id="enviar" onclick="valida_formu();return document.valorRetorno" value="Enviar" />
</form>
</div>
<div class="pageName" id="centro"></div>
<% }
else { %>
<div id="sesion">
<form id="formu" name="formu" method="post" action="javascript:<% session.invalidate(); %>;window.location='index.jsp'">
<label><span class="navText">
Bienvenido, <%= usuario.getNombre() %></span></label>
<input name="logout" type="submit" class="bodyText" id="logout" value="Terminar Sesión" />
</form>
</div>

<div class="pageName" id="centro">
<br>
<blockquote>
<p>Administrar opciones</p>
<p> </p>
<% if (usuario.getPerfil().equals("admin")) { %>
<p><a href="#" onclick="llamarasincrono('gestionusuario/index.jsp', 'centro')">Gestionar Usuarios</a></p>
<% } %>
<p> </p>
<p><a href="#" onclick="llamarasincrono('gestionoferta/index.jsp', 'centro')">Gestionar Ofertas</a> </p>
<blockquote>
</div>

<% }%>

El archivo esqueindex.jsp contiene una capa donde van los campos de usuario y contraseña que al ser introducidos redirecciona a una página "comprobarusuario.jsp" que contiene el siguiente código:
<%@page contentType="text/html; charset=ISO-8859-15"%>
<%@page pageEncoding="UTF-8"%>
<%@ page language="java" import="bd.*" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">

<%
String nombrebuscado=request.getParameter("usuario");
String passbuscada=request.getParameter("password");
if(nombrebuscado==null) return;
if(passbuscada==null) return;

BaseDatos bd=new BaseDatos();

Usuario usuario=bd.getUsuarioPass(nombrebuscado,passbuscada);
bd.close();
//if (usuario != null)



HttpSession sesion=request.getSession(true);

sesion.setAttribute("usuario", usuario);
%>


<html>
<head>
<title>Demo </title>
</head>

<body>
<br>

<%
//Comprobar usuario
if (usuario== null) {
%>
<script language="javascript">
alert("Error usuario o contraseña no válidos");
window.location="../index.jsp";

</script>


<%
return;}

else {// Gestionar contenidos y usuarios
%>
<script language="javascript">
window.location="../index.jsp?id=<%= usuario.getId() %>&nombre=<%=usuario.getNombre()%>&perfil=<%=usuario.getPerfil()%>";
</script>
<% } %>

</body>
</html>


Dentro del archivo esqueindex.jsp está el menú de la web, algo como:

<div id="menu">
<div id="contenedor_menu" style="width:130px;">
<!-- inicio menu 1-->
<div class="principal" > <a href="#" onclick="ir('index.jsp')">Principal </a></div>


<div id="uno" style="display:none;">

</div>
<!--fin menu 1-->
<!--inicio menu 2-->
<div class="principal" onclick="mostrar('dos')">Catálogo</div>
<div id="dos" style="display:none;">

</div>

Mi problema es que al pinchar en el elemento "Principal" del menú, el cual redirecciona a la página index.jsp, se pierde la sesión y la página index.jsp se muestra sin los datos de sesión.
Esta página index.jsp lo único que contiene es:

<jsp:include page="esqueindex.jsp" />
<html>
<body></body></html>
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Porque se pierde la sesión?

Publicado por Gerardo (5 intervenciones) el 23/08/2009 05:58:38
El problema es tan sensillo, cada vez que mandas a llamar esqueindex.jsp en la linea donde escribes "HttpSession sesion=request.getSession(true);" lo que estas haciendo es crear siempre una sesion nueva, el true que envias al metodo indica que debe crear una nueva sesion si esta no existe y si existe, la destruye y crea una nueva, te recomiendo que le quites ese true que le pones y lo dejes asi

HttpSession sesion=request.getSession();

¿como puedes comprobar que es la misma sesion que ya construiste??

bueno puedes hacer un debug con esto

request.getSession().isNew()

eso te dira si la sesion con la que estas trabajando es nueva o ya es una sesion creada previemente
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

:Porque se pierde la contraseñanecesitosesión?

Publicado por antonio (1 intervención) el 22/03/2010 18:44:10
necesito respuestas
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar