Foros del Web » Programando para Internet » PHP »

Problema con sesiones y frames.

Estas en el tema de Problema con sesiones y frames. en el foro de PHP en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 10/04/2006, 04:53
 
Fecha de Ingreso: marzo-2005
Mensajes: 197
Antigüedad: 12 años, 9 meses
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...
  #2 (permalink)  
Antiguo 11/04/2006, 10:41
 
Fecha de Ingreso: marzo-2005
Mensajes: 197
Antigüedad: 12 años, 9 meses
Puntos: 1
Tras mucho probar creo que el problema está al intentar refrescar una página dentro de un frame del siguiente modo:

Código PHP:
echo "<meta http-equiv=\"refresh\" content=\"0;URL=http://sitio/menu.php?pass=y\";TARGET=topFrame\">"
¿Podría intentar redireccionar la página con un header dentro de un frame en concreto?
  #3 (permalink)  
Antiguo 08/05/2006, 03:37
 
Fecha de Ingreso: marzo-2005
Mensajes: 197
Antigüedad: 12 años, 9 meses
Puntos: 1
Exclamación

Simplificando el problema:

Tengo una web en un servidor A.

Como el plan de hosting del servidor A no contempla las bases de datos, las creo en un servidor B, y en el servidor A meto una página con frames que apuntan al servidor A.

El problema es que al intentar abrir una sesión en el servidor A (debo de abrirla en dicho servidor, puesto que necesito convertir valores de la base de datos en variables de sesión) me da problemas.

Básicamente (creo) que es porque al recargar la página B (con el frame que apunta al servidor A que es el que crea la sesión) el script no hace lo que yo deseo.

Curiosamente falla solamente en ciertas versiones del explorer, que es curiosamente el navegador para el que tengo que implementarlo...

¿Alguien podría darme alguna idea?

Muchas gracias por adelantado...
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 06:40.