Ver Mensaje Individual
  #1 (permalink)  
Antiguo 10/04/2006, 03:53
Koden
 
Fecha de Ingreso: marzo-2005
Mensajes: 197
Antigüedad: 19 años, 1 mes
Puntos: 1
Exclamación Problema con sesiones y frames.

Tengo una página en HTML y PHP con varios frames.

En uno de ellos (la columna izquierda) cargo un menú con las diferentes secciones de la página, y bajo estas, un formulario de login que apunta a la página log.php.

La página de log.php crea una sesión y se redirige al mismo menú. El formulario de login, así mismo, debería desaparecer de dicho frame al estar la sesión abierta...

El formulario de login del menú tiene el siguiente código:

Código PHP:
<?php
  
if (isset ($_GET["pass"]) && $_GET["pass"] == 'y')
    
session_start();

  
$dbh mysql_connect ("serv","usr","pass") or die ('I cannot connect to database because: ' mysql_error ());
  
mysql_select_db ("db",$dbh);
?>
<!-- Secciones del menú -->
<?php
  
if (isset ($_SESSION["login"]) && $_SESSION["login"] == true)
  {
    
$d "SELECT nombre FROM colegiados WHERE id_colegiado='" $_SESSION["id_colegiado"] . "'";
    
$e mysql_query ($d,$dbh) or die ('I cannot execute the query because: ' mysql_error ());
    
$f mysql_fetch_array ($e);
?>
<script language="javascript">
  function verifica() {
    if ((document.formulario.user.value == "") || (document.formulario.user.value== null)) {
      alert("Escriba un usuario");
      document.formulario.user.focus();
      return false;
    }
    else {
      if ((document.formulario.pass.value == "") || (document.formulario.pass.value== null)) {
        alert("Escriba una contraseña"); 
        document.formulario.pass.focus();
        return false;
      }
      else
    document.formulario.submit();
    }
  }
</script>
<table border="0" cellpadding="0" cellspacing="0">
  <tr><td height="5" colspan="2"></td></tr>
  <tr>
    <TD align="center">
     Sesi&oacute;n de<br><b><?php echo $f["nombre"];?></b><br>
    <a href="log.php?logout=si" target="_top"><b>Cerrar sesi&oacute;n</b></a>
    </TD>
    <td width="50"></td>
  </tr>
</table>
<?php }else{?>
<table align="center" width="130" cellpadding="0" cellspacing="0" border="1" bordercolor="#669900">
  <TR valign="top">
    <TD align="center" width="130" valign="top">
    <?php if (isset ($_GET["error"])){?>
    <?php echo $_GET["error"];?><br>
    <?php }?>
    <form name="formulario" method="post" action="log.php">
      <input type="hidden" name="login" value="si">
      <u>Acceso Colegiados</u><br>
      <b>Usuario:</b><br>
      <input type="text" name="user" size="14"><br>
      <b>Contraseña:</b><br>
      <input type="password" name="pass" size="10"><br>
      <a onClick="return verifica();">Entrar</a>
    </form>
    </TD>
  </TR>
</table>
<?php }?>
Y el archivo de log.php contiene el siguiente código...

Código PHP:
if ($_POST["login"] == 'si' || $_GET["login"] == 'si')
{
  
$dbh mysql_connect ("sitio","usr","pass") or die ('I cannot connect to database because: ' mysql_error ());
  
mysql_select_db ("bd",$dbh);

  
$a "SELECT id_colegiado FROM colegiados WHERE usuario='" $_POST["user"] . "' AND contrasena='" $_POST["pass"] . "'";
  
$b mysql_query ($a,$dbh) or die ('I cannot execute the query because: ' mysql_error ());

  
$c mysql_num_rows ($b);
  
$d mysql_fetch_array ($b);

  if (
$c 0)
  {
    
session_start ();
    
$_SESSION["login"] = true;
    
$_SESSION["id_colegiado"] = $d["id_colegiado"];

    
//Hago la redirección con un meta en lugar de con un header
    //Para poder redireccionar la página en el mismo frame que el menú
    
echo "<meta http-equiv=\"refresh\" content=\"0;URL=http://sitio/menu.php?pass=y\";TARGET=topFrame\">";
  }
  else
  {
    
session_start ();
    
$_SESSION = array();
    
session_destroy();

    echo 
"<meta http-equiv=\"refresh\" content=\"0;URL=http://www.sitio.com/\";TARGET=_top\">";
  }
}

if (isset (
$_GET["logout"]) && $_GET["logout"] == 'si')
{
  
session_start ();
  
$_SESSION = array();
  
session_destroy();
  
header ("Location: http://www.sitio.com/");

El script funciona perfectamente en Firefox, pero en explorer no hay manera de hacerlo tirar...
A mí particularmente me da lo mismo, pero supongo que la mayoría de usuarios usen el explorer y el script este me está trayendo por la calle de la amargura (no veo el posible fallo por ningún lado)...

¿Alguien tiene alguna idea?

Muchísimas gracias por descontado...