Ver Mensaje Individual
  #2 (permalink)  
Antiguo 20/07/2013, 06:43
fcotorgi
 
Fecha de Ingreso: julio-2013
Mensajes: 53
Antigüedad: 10 años, 9 meses
Puntos: 1
Respuesta: Pérdida de la sesión (I)

Veamos la página donde se implementa la clase Web:

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

--paréntesis--

La página usuario.php, que no es empleada en este caso, inicia también la sesión:

Código PHP:
Ver original
  1. <?php
  2.  
  3.  
  4. ...
  5. ?>

--fin paréntesis--

(Disculpad que haya sido tan largo, pero he intentado introducir todos los posibles factores)

¿Alguien puede arrojarme algo de luz para adivinar la causa? Gracias de antemano.