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

Todos los archivos PHP comienzan así:

Código PHP:
Ver original
  1. <?php
  2. //Comentario
  3. //sigue el código.

Sólo ha tres excepciones:

En la página Web.php donde se implementa la clase Web:

Código PHP:
Ver original
  1. public function iniciar_sesion($usuario, $clave){
  2.         define("NO_HAY_ERROR", NULL);
  3.         if ((isset($usuario)) && (isset($clave))){
  4.             $mysql = new mysqli($this->leer_bdweb_servidor(), $this->leer_bdweb_usuario(), $this->leer_bdweb_clave(), $this->leer_bdweb_nombre());
  5.             if($mysql->connect_error == NO_HAY_ERROR){
  6.                 $consulta = "SELECT *
  7.                             FROM `Usuarios`
  8.                             WHERE `nombre` = '$usuario' AND `clave` = '$clave'";
  9.                 $resultado = $mysql->query($consulta);
  10.                 if ($resultado->num_rows > 0){
  11.                     session_destroy();
  12.                     //A quitar luego...
  13.                     error_reporting(E_ALL);
  14.                     ini_set('display_errors', '1');
  15.                     //...hasta aquí.
  16.                     session_start();
  17.                     $_SESSION['usuario'] = $usuario;
  18.                     $this->escribir_acceso($this::USUARIO_REGISTRADO);
  19.                     $resultado->free();
  20.                 }else{
  21.                     $this->terminar_sesion();
  22.                 }
  23.             }else{
  24.                 session_destroy();
  25.                 //A quitar luego...
  26.                 error_reporting(E_ALL);
  27.                 ini_set('display_errors', '1');
  28.                 //...hasta aquí.
  29.                 session_start();
  30.                 $_SESSION['usuario'] = 'ERR'.$mysql->connect_errno;
  31.                 $this->escribir_acceso($this::USUARIO_ANONIMO);
  32.                 echo $mysql->connect_error;
  33.                 echo "<br />";
  34.             }
  35.             $mysql->close();
  36.         }else{
  37.             $this->terminar_sesion();
  38.         }
  39.     }
  40.     public function terminar_sesion(){
  41.         session_destroy();
  42.         session_start();
  43.         //A quitar luego...
  44.         error_reporting(E_ALL);
  45.         ini_set('display_errors', '1');
  46.         //...hasta aquí.
  47.         $_SESSION['usuario'] = 'Anónimo';
  48.         $this->escribir_acceso($this::USUARIO_ANONIMO);
  49.     }

Pero como puedes verse, no hay ninguna impresión, nada. El método escribir acceso es sólo una asignación del parámetro del método a un atributo de la clase. Nada más.

¿Y si se llama a estos métodos en un contexto en el que se imprime algún ASCII antes de llamar a session_start()?

La respuesta es "no".

Código PHP:
Ver original
  1. <?php
  2. //Inicio de sesión.
  3. ini_set('display_errors', '1');
  4. //Ficheros requeridos.
  5. require_once 'Web.php';
  6. require_once 'usuario.php';
  7. //Creación de la clase Biblioteca.
  8. class Recepcion extends Web{
  9.     ....
  10. }
  11.  
  12. /**
  13.  * Descripción: Página de inicio de sesión.
  14.  * IDE:         Realizado con NetBeans 7.2.1.
  15.  */    
  16.  
  17. define ('AUTOR', 'Francisco José Torres Gimeno');
  18. define ('FECHA_CREACION', 'Domingo, 26 de mayo de 2013');
  19. define ('FECHA_MODIFICACION', 'Domingo, 21 de julio de 2013');
  20. define ('HAY_ENLACE_AL_INICIO', TRUE);
  21. define ('SUBTITULO', 'Página en construcción');
  22. define ('TITULO', 'Recepción particular de <br /> Fco. J. Torres Gimeno');
  23. define ('VERSION', 'Alpha 1.0.3');
  24.  
  25. //Creación de la página.
  26. $web = new Recepcion(AUTOR,
  27.                      FECHA_CREACION,
  28.                      FECHA_MODIFICACION,
  29.                      VERSION);
  30. //Ejecución de las acciones del formulario que remitió a esta página.
  31. //Sólo se da uno de los casos.
  32. if(isset($_POST['recuperar_clave'])){
  33.     $web->enviar_clave();
  34. }
  35. if(isset($_POST['iniciar_sesion'])){
  36.     $web->iniciar_sesion(); //NO SE HA COMENZADO EL CÓDIGO HTML
  37. }
  38. if(isset($_POST['accion'])){
  39.     if($_POST['accion']=='finalizar_sesion'){
  40.         $web->terminar_sesion(); //NO SE HA COMENZADO EL CÓDIGO HTML
  41.     }
  42. }
  43. if(isset($_POST['registrar_usuario'])){
  44.     $web->registrar_usuario();
  45. }
  46. //Escritura de la página.
  47. $web->escribir_doctype();
  48. $web->iniciar_html();
  49.     $web->escribir_head();
  50.     $web->iniciar_body();
  51.         $web->escribir_capa_superpuesta();
  52.         $web->iniciar_contenedor();
  53.             $web->iniciar_encabezamiento();
  54.                 $web->escribir_menu_superior();
  55.                 $web->escribir_submenu_superior();
  56.                 $web->escribir_mensaje_de_informacion('');
  57.                 $web->escribir_mensaje_de_aviso('');
  58.                 $web->escribir_mensaje_de_exito('');
  59.                 $web->escribir_mensaje_de_error('');
  60.             $web->finalizar_encabezamiento();
  61.             $web->iniciar_columna_central();
  62.                 $web->iniciar_columna_izquierda();
  63.                     $web->titular_columna_izquierda(TITULO, SUBTITULO);
  64.                     $web->escribir_columna_izquierda();
  65.                     $web->indexar_inicio(HAY_ENLACE_AL_INICIO);
  66.                 $web->finalizar_columna_izquierda();
  67.                 $web->iniciar_columna_derecha();
  68.                     $web->escribir_columna_derecha_introduccion();
  69.                     if(isset($_POST['accion'])){
  70.                         if($_POST['accion']=='iniciar_sesion'){
  71.                             $web->escribir_columna_derecha_inicio_sesion();
  72.                         }elseif($_POST['accion']=='recuperar_clave'){
  73.                             $web->escribir_columna_derecha_recuperacion_clave();
  74.                         }elseif($_POST['accion']=='registrar_usuario'){
  75.                             $web->escribir_columna_derecha_registro_usuario();
  76.                         }else{
  77.                             //Nada.
  78.                         }
  79.                     }else{
  80.                         //Nada.
  81.                     }
  82.                     echo $web->leer_mensaje();
  83.                 $web->finalizar_columna_derecha();
  84.             $web->finalizar_columna_central();
  85.         $web->finalizar_contenedor();
  86.     $web->finalizar_body();
  87.  $web->finalizar_html();
  88. ?>