Foros del Web » Programando para Internet » PHP »

Problemas con Sesiones IE, Opera, Firefox

Estas en el tema de Problemas con Sesiones IE, Opera, Firefox en el foro de PHP en Foros del Web. Hola, muy buenas. He creado un sitio web usando php-mysql-apache. He utilizado sesiones propagadas por URL para mantener cada sesión de los usuarios. La web ...
  #1 (permalink)  
Antiguo 06/11/2005, 09:29
 
Fecha de Ingreso: noviembre-2004
Mensajes: 47
Antigüedad: 13 años, 1 mes
Puntos: 0
Exclamación Problemas con Sesiones IE, Opera, Firefox

Hola, muy buenas.
He creado un sitio web usando php-mysql-apache. He utilizado sesiones propagadas por URL para mantener cada sesión de los usuarios. La web funciona perfectamente con IE pero ahora, cuando fui a probar la aplicación con Opera y Mozilla Firefox, no respeta las sesiones.Aparentemente parece un problema a de propagación de las mismas.

Procedo a explicarlo más detalladamente:
Hay clientes registrados y visitantes. La única diferencia es q un usuario registrado verá su nombre arriba cuando esté navegando, podrá cambiar sus datos, cerrar sesión y unas cuantas opciones más.
Una vez logueado un cliente, paso a una pág. php q contiene en la parte superior una tabla donde muestro el nombre de usuario y, al lado, el botón de cerrar sesión. El resto de la página es un flash interactivo para navegar entre las distintas opciones. Este flash contiene un menú desplegable en el que, al pinchar en cada botón, te lleva a otra página .php . Cada página php contiene el siguiente código al principio de todo para controlar las sesiones:
Código PHP:
<?

session_start
();
if(!(
$_SESSION["S_login"]) || !($_SESSION["S_dni"])|| !($_SESSION["S_tipo"]))
    {
        
$_SESSION = array();
        
session_destroy();
        
header ('Location: nosesion.php');
    }
?>
El caso es que en IE funciona todo perfectamente. En Opera y Firefox ocurre el mismo problema:
Cuando el cliente se loguea, se le muestra su página personal, con su nombre arriba y la posibilidad de cerrar sesión. Si va al menú flash y pincha en una opción, le lleva a una nueva página php en la q sigue apareciendo su nombre de usuario arriba con la opción de desconectarse. Pero si vuelve a pinchar en una opción del menú, la siguiente página ya no muestra su nombre ni la opción de desconectar. De la misma manera, tb incluyo un botón abajo para volver al principio y que, al pulsarlo, tampoco se guarda la sesión.

¿Cómo podría solucionar esto? Insisto que en IE funciona todo perfectamente.

Espero no haberme liado mucho.
Un saludo y muchas gracias de antemano.
PD:Os dejo el código de un par de páginas q se llaman entre sí.
Nota:Todo el barullo de código q aparece después de la etiqueta </style> es código generado por flash.

Página principal de un cliente registrado:
Código:
<?
session_start();
if(!($_SESSION["S_login"]) || !($_SESSION["S_dni"])|| !($_SESSION["S_tipo"]))
	{
		$_SESSION = array();
		session_destroy();
		header ('Location: nosesion.php');
	}
?>

<HTML>
<HEAD>
<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
<TITLE>index_cliente_registrado</TITLE>

<style type="text/css">
  html, body 
    {
      height: 100%;
      margin: 0;
      padding: 0;
    }
</style>

<script language="JavaScript" type="text/JavaScript">
<!--
function MM_reloadPage(init) {  //reloads the window if Nav4 resized
  if (init==true) with (navigator) {if ((appName=="Netscape")&&(parseInt(appVersion)==4)) {
    document.MM_pgW=innerWidth; document.MM_pgH=innerHeight; onresize=MM_reloadPage; }}
  else if (innerWidth!=document.MM_pgW || innerHeight!=document.MM_pgH) location.reload();
}
MM_reloadPage(true);

function MM_preloadImages() { //v3.0
  var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
    var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
    if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
}

function MM_goToURL() { //v3.0
  var i, args=MM_goToURL.arguments; document.MM_returnValue = false;
  for (i=0; i<(args.length-1); i+=2) eval(args[i]+".location='"+args[i+1]+"'");
}

function MM_swapImgRestore() { //v3.0
  var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
}

function MM_findObj(n, d) { //v4.01
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
  if(!x && d.getElementById) x=d.getElementById(n); return x;
}

function MM_swapImage() { //v3.0
  var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
   if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
}
//-->
</script>
</HEAD>
<BODY bgcolor="#FFFFFF" link="#7D0000" vlink="#7D0000" alink="#7D0000" onLoad="MM_preloadImages('iconos/salir.gif','iconos/salir2.gif')">
<table width="100%"  border="0">
  <tr> 
    <td width="85%" height="33"> 
      <div align="right"><font color="#FF0000"><b><font size="1">.::</font></b></font><font size="1"> 
        Usuario: <font color="#666666"><? echo $S_login; ?>&nbsp; <a href="javascript:;" onClick="MM_goToURL('parent','cerrar_sesion.php');return document.MM_returnValue"><img src="iconos/salir.gif" name="Image1" width="12" height="12" border="0" align="absbottom" id="Image1" onMouseDown="MM_swapImage('Image1','','iconos/salir.gif',1)" onMouseOver="MM_swapImage('Image1','','iconos/salir2.gif',1)" onMouseOut="MM_swapImgRestore()"></a></font></font><br>
        <font size="1">[<font color="#7D0000"> </font></font> <font color="#7D0000" size="1"> 
        <a href="modificar_datos_cliente1.php">modificar Perfil</a></font><font size="1"> 
        ]<font color="#666666">&nbsp; </font></font></div></td>
  </tr>
</table>
<!-- URL's used in the movie-->
<A HREF=./noticias.php></A> <A HREF=./index_cliente_registrado.php></A> 
<A HREF=cliente_peticion.php></A> 
<OBJECT classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
 codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,0,0"
 WIDTH="100%" HEIGHT="100%" id="index_cliente_registrado" ALIGN="">
 <PARAM NAME=movie VALUE="index_cliente_registrado.swf"> <PARAM NAME=loop VALUE=false> <PARAM NAME=quality VALUE=high> <PARAM NAME=scale VALUE=exactfit> <PARAM NAME=bgcolor VALUE=#FFFFFF> <EMBED src="index_cliente_registrado.swf" loop=false quality=high scale=exactfit bgcolor=#FFFFFF  WIDTH="100%" HEIGHT="100%" NAME="index_cliente_registrado" ALIGN=""
 TYPE="application/x-shockwave-flash" PLUGINSPAGE="http://www.macromedia.com/go/getflashplayer"></EMBED>
</OBJECT>
</BODY>
</HTML>

Página llamada desde el menú flash(noticias.php):
Código:
<?

session_start();
if(!($_SESSION["S_login"]) || !($_SESSION["S_dni"])|| !($_SESSION["S_tipo"]))
	{
		$_SESSION = array();
		session_destroy();
		header ('Location: nosesion.php');
	}
?>

<HTML>
<HEAD>
<meta http-equiv=Content-Type content="text/html;  charset=ISO-8859-1">
<TITLE>noticias</TITLE>

<style type="text/css">
  html, body 
    {
      height: 100%;
      margin: 0;
      padding: 0;
    }
</style>

<script language="JavaScript" type="text/JavaScript">
<!--
function MM_goToURL() { //v3.0
  var i, args=MM_goToURL.arguments; document.MM_returnValue = false;
  for (i=0; i<(args.length-1); i+=2) eval(args[i]+".location='"+args[i+1]+"'");
}

function MM_preloadImages() { //v3.0
  var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
    var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
    if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
}

function MM_swapImgRestore() { //v3.0
  var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
}

function MM_findObj(n, d) { //v4.01
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
  if(!x && d.getElementById) x=d.getElementById(n); return x;
}

function MM_swapImage() { //v3.0
  var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
   if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
}
//-->
</script>
</HEAD>
<BODY bgcolor="#FFFFFF" onLoad="MM_preloadImages('iconos/salir.gif','iconos/salir2.gif')">
<table width="100%"  border="0">
  <tr> 
    <td height="14"> <div align="right"><font color="#FF0000"><b><font size="1">.::</font></b></font><font size="1"> 
        Usuario: <font color="#666666"><? echo $S_login; ?>&nbsp; <a href="javascript:;" onClick="MM_goToURL('parent','cerrar_sesion.php');return document.MM_returnValue"><img src="iconos/salir.gif" name="Image1" width="12" height="12" border="0" align="absbottom" id="Image1" onMouseDown="MM_swapImage('Image1','','iconos/salir.gif',1)" onMouseOver="MM_swapImage('Image1','','iconos/salir2.gif',1)" onMouseOut="MM_swapImgRestore()"></a></font></font> 
        <font size="1"><font color="#666666">&nbsp;&nbsp; </font></font></div></td>
  </tr>
</table>
<!-- URL's used in the movie-->
<A HREF=./index_cliente_registrado.php> </A> 

<OBJECT classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
 codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,0,0"
 WIDTH="100%" HEIGHT="100%" id="noticias" ALIGN="">
 <PARAM NAME=movie VALUE="noticias_cliente_registrado.swf"> <PARAM NAME=loop VALUE=false> <PARAM NAME=quality VALUE=high> <PARAM NAME=scale VALUE=exactfit> <PARAM NAME=bgcolor VALUE=#FFFFFF> <EMBED src="noticias.swf" loop=false quality=high scale=exactfit bgcolor=#FFFFFF  WIDTH="100%" HEIGHT="100%" NAME="noticias" ALIGN=""
 TYPE="application/x-shockwave-flash" PLUGINSPAGE="http://www.macromedia.com/go/getflashplayer"></EMBED>
</OBJECT>
</BODY>
</HTML>
El resto de páginas llamadas desde el menú es similar a ésta última puesto q tan sólo cambia la información q muestra cada una. Todas mantienen el mismo menú y resto de opciones.
  #2 (permalink)  
Antiguo 07/11/2005, 05:22
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Según tu código tu NO propagas el SID en el URL ..

En redireccionamientos como:
header ('Location: nosesion.php');

NO incluyes el SID en el URL que redireccionas. Tampóco lo haces en los links que usas .. además que te falta un exit; tras cada header("Location: ...") que haces para terminar la ejecución de tu script en ese punto y que no se ejecute NADA más que venga a continuación de código.

Por ende .. propagas el SID en cookies, por qué lo más seguro es que uses como configuración de php.ini:

session.use_cookies = ON

Si te funciona tu sistema bajo un navegador y otros no .. el problema (al propagar el SID en cookies) se debe a la aceptación de las cookies en ese PC/navegador. Las cookies se han de aceptar por tu navegador y debes revisar si usas algún firewall, antivirus o similar que las pueda estar bloqueando para que las acepte.

La propagación del SID por cookies es lo más seguro y cómodo para tu programación (no tienes que propagar el SID a mano en ciertos redireccionamientos) .. pero tiene los requisitos de toda cookie: deben ser aceptadas.

Un saludo,
  #3 (permalink)  
Antiguo 07/11/2005, 11:06
 
Fecha de Ingreso: noviembre-2004
Mensajes: 47
Antigüedad: 13 años, 1 mes
Puntos: 0
Efectivamente tengo esa opción en el php.ini . He mirado y las cookies están activadas en ambos navegadores.

Lo q no entiendo es q parte de la sesión sí q me funciona ya q en cuanto un cliente se loguea, aparece su nombre arriba, puede cerrar sesión, aparecen sus opciones personales, etc.

Por otra parte, la parte de administración q tengo creada, no da ningún problema.

Seguiré investigando y probando con tus soluciones.

Muchísimas gracias por tu ayuda, como siempre, Cluster.

Un saludo.
  #4 (permalink)  
Antiguo 07/11/2005, 11:12
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Revisa en los códigos que tienes problema que uses:

session_start();

Si en algún script te olvidastes de usarlo .. la sesión no se iniciará y por ende no veras nada en tus variables $_SESSION ...

Un saludo,
  #5 (permalink)  
Antiguo 07/11/2005, 12:02
 
Fecha de Ingreso: noviembre-2004
Mensajes: 47
Antigüedad: 13 años, 1 mes
Puntos: 0
Ok, eso haré. Muchas gracias. Ya te contaré.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:04.