Ver Mensaje Individual
  #6 (permalink)  
Antiguo 21/07/2013, 11:17
fcotorgi
 
Fecha de Ingreso: julio-2013
Mensajes: 53
Antigüedad: 11 años, 5 meses
Puntos: 1
Respuesta: Pérdida de la sesión (II)

(...continua...)

El formulario llama a esa misma página y ejecuta el siguiente método de la clase '"Web" que está implementada en "Web.php":

Código PHP:
Ver original
  1. <?php
  2. //Inicio de sesión.
  3. ...
  4. class Web{
  5.     ...
  6.     public function iniciar_sesion($usuario, $clave){
  7.         define("NO_HAY_ERROR", NULL);
  8.         if ((isset($usuario)) && (isset($clave))){
  9.             $mysql = new mysqli($this->leer_bdweb_servidor(), $this->leer_bdweb_usuario(), $this->leer_bdweb_clave(), $this->leer_bdweb_nombre());
  10.             if($mysql->connect_error == NO_HAY_ERROR){
  11.                 $consulta = "SELECT *
  12.                             FROM `Usuarios`
  13.                             WHERE `nombre` = '$usuario' AND `clave` = '$clave'";
  14.                 $resultado = $mysql->query($consulta);
  15.                 if ($resultado->num_rows > 0){
  16.                     session_destroy();
  17.                     session_start();
  18.                     $_SESSION['usuario'] = $usuario;
  19.                     $this->escribir_acceso($this::USUARIO_REGISTRADO);
  20.                     $resultado->free();
  21.                 }else{
  22.                     $this->terminar_sesion();
  23.                 }
  24.             }else{
  25.                 session_destroy();
  26.                 session_start();
  27.                 $_SESSION['usuario'] = 'ERR'.$mysql->connect_errno;
  28.                 $this->escribir_acceso($this::USUARIO_ANONIMO);
  29.                 echo $mysql->connect_error;
  30.                 echo "<br />";
  31.             }
  32.             $mysql->close();
  33.         }else{
  34.             $this->terminar_sesion();
  35.         }
  36.     }
  37.     public function terminar_sesion(){
  38.         session_destroy();
  39.         session_start();
  40.         $_SESSION['usuario'] = 'Anónimo';
  41.         $this->escribir_acceso($this::USUARIO_ANONIMO);
  42.     }
  43.     ...
  44.     public function escribir_menu_superior(){
  45.         if(isset($_SESSION['usuario'])){
  46.             $usuario = $_SESSION['usuario'];
  47.         }else{
  48.             $usuario = 'Anónimo';
  49.         }
  50.         echo "        <!-- Menú superior -->\n";
  51.         echo "        <div class='menu' id='menu'>\n";            
  52.         echo "            <a href='/Biblioteca.php'>Biblioteca </a>|\n";
  53.         echo "            <a href='/Sindesmoteca.php'>Sindesmoteca </a>|\n";
  54.         echo "            <a href='/galeria/Galeria.php'>Galería </a>|\n";
  55.         echo "            <a href='/Historial.php'>Historial </a>|\n";
  56.         echo "            <a href='/Videoteca.php'>Videoteca </a>|\n";
  57.         echo "            <a href='/Buzon.php'>Buzón </a>|\n";
  58.         echo "            <a href='/Fonoteca.php'>Fonoteca </a>|\n";
  59.         echo "            <a href='/recepcion.php'>Recepción </a>|\n";
  60.         echo "            <a href=''>".$usuario."</a>\n";      
  61.         echo "        </div>\n";
  62.         echo "        <!-- Menú superior (fin) -->\n";
  63.         echo "        \n";
  64.     }
  65.     ...
  66. }
  67. ?>

Todos los ficheros php que pueden ser ejecutados en el menú comienzan así:

Código PHP:
Ver original
  1. <?php
  2. //Inicio de sesión.
  3. ...
  4. ?>

Y no hay ningún otro <i>session_start()</i> más que los escritos arriba.

Cuando ejecuto alguno de los archivos php del menú, se pierde la sesión. Si alguien puede arrojarme algo de luz, se lo agradeceré.