Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Pérdida de la sesión (II)

Estas en el tema de Pérdida de la sesión (II) en el foro de PHP en Foros del Web. Cita: Iniciado por fcotorgi Paketetrueke... lo siento... pero si no me dices algo concreto (fichero, línea y error) respecto al código que he mostrado, creo ...

  #31 (permalink)  
Antiguo 21/07/2013, 17:39
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Pérdida de la sesión (II)

Cita:
Iniciado por fcotorgi Ver Mensaje
Paketetrueke... lo siento... pero si no me dices algo concreto (fichero, línea y error) respecto al código que he mostrado, creo que no acabas de verlo.


¿Y por qué debo decirte?

¿Acaso soy el intérprete de PHP?

¿Notaste que en los mensajes de error está esa información?

Es el colmo que no hayas leído el enlace, te lo vuelvo a colocar:

http://www.forosdelweb.com/wiki/PHP:...n_line_4%22%3F

Y voy a hacer cita de lo que se explica ahí:
Cita:
Cannot modify header information - headers already sent by (output started at 1:2) in 3 on line 4

[1] - Ruta del archivo php que inició la salida (el que mandó texto)

[2] - Línea del archivo [1] en la que se produjo la salida.

[3] - Archivo que intentó enviar una cabecera, luego de que la salida comenzara (normalmente es el mismo que [1])

[4] - Línea de [3] en la que se intentó enviar la cabecera.
¿Qué parte no entiendes?

__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #32 (permalink)  
Antiguo 21/07/2013, 18:01
 
Fecha de Ingreso: julio-2013
Mensajes: 53
Antigüedad: 10 años, 9 meses
Puntos: 1
Respuesta: Pérdida de la sesión (II)

He enviado a pastebin el código de recepción.php. Me he inscrito en pastebin como fcotorgi.
  #33 (permalink)  
Antiguo 21/07/2013, 18:07
 
Fecha de Ingreso: julio-2013
Mensajes: 53
Antigüedad: 10 años, 9 meses
Puntos: 1
Respuesta: Pérdida de la sesión (II)

Ya está el código de web.php también.
  #34 (permalink)  
Antiguo 21/07/2013, 18:08
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Pérdida de la sesión (II)

Cita:
Iniciado por fcotorgi Ver Mensaje
He enviado a pastebin el código de recepción.php. Me he inscrito en pastebin como fcotorgi.
Vale, me imagino que hay que entrar al sitio y buscarte, ¿no fuiste capaz de copiar y pegar el enlace directo a lo que pegaste ahí?
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #35 (permalink)  
Antiguo 21/07/2013, 18:10
 
Fecha de Ingreso: julio-2013
Mensajes: 53
Antigüedad: 10 años, 9 meses
Puntos: 1
Respuesta: Pérdida de la sesión (II)

Paketetrueke... me estás cansando con tu tono... no hace falta que me ayudes si eso te cansa. Te lo agradezco igualmente.
  #36 (permalink)  
Antiguo 21/07/2013, 18:14
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Pérdida de la sesión (II)

Vamos a repasar tus mensajes de error originales:
Cita:
<b>Warning</b>: session_start(): Cannot send session cookie - headers already sent by (output started at /homepages/**/**********/htdocs/*************/recepcion.php:1) in <b>/homepages/**/**********/htdocs/*************/recepcion.php</b> on line <b>5</b><br />
<br />
<b>Warning</b>: session_start(): Cannot send session cache limiter - headers already sent (output started at /homepages/**/**********/htdocs/*************/recepcion.php:1) in <b>/homepages/**/**********/htdocs/*************/recepcion.php</b> on line <b>5</b><br />
<br />
<b>Notice</b>: A session had already been started - ignoring session_start() in <b>/homepages/**/**********/htdocs/*************/Web.php</b> on line <b>5</b><br />
<br />
<b>Notice</b>: A session had already been started - ignoring session_start() in <b>/homepages/**/**********/htdocs/*************/usuario.php</b> on line <b>3</b><br />
<br />
<b>Notice</b>: A session had already been started - ignoring session_start() in <b>/homepages/**/**********/htdocs/*************/BaseDeDatos.php</b> on line <b>3</b><br />
<br />
<b>Notice</b>: A session had already been started - ignoring session_start() in <b>/homepages/**/**********/htdocs/*************/Usuario_BaseDeDatos.php</b> on line <b>2</b><br />
<br />
Y vamos a ver que haces mal, paso a paso.

1. El primer error indica que ya se ha iniciado sesión enviado algo en el archivo recepcion.php, en la linea 1, lo cual es verdaderamente extraño. Posiblemente se trate de un tema de BOM, investiga eso.

2. Si ya inicias sesión ahí, ¿por qué también inicias sesión en los archivos que incluyes en ese mismo script? Es decir, los errores de "A session had already been started" es porque evidentemente haces uso de session_start() más de una vez en ejecución.

No es necesario hacerlo por cada script, sólo debes hacerlo una vez y ninguna más, ¿me explico?

3. No hace falta leer tu código, hace falta que prestes atención a los mensajes de error.

No me extraña que pierdas la sesión si no sabes usarla correctamente, de paso deberías consultar el manual de PHP al respecto.

PDTA: si no te gusta mi tono también podrías no hacerme caso, como lo has hecho desde el inicio.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.

Última edición por pateketrueke; 21/07/2013 a las 18:21 Razón: errata
  #37 (permalink)  
Antiguo 21/07/2013, 18:17
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años
Puntos: 292
Respuesta: Pérdida de la sesión (II)

Cita:
Iniciado por pateketrueke Ver Mensaje
1. El primer errorindica que ya se ha iniciado sesión en el archivo recepcion.php, en la linea 1, lo cual es verdaderamente extraño. Posiblemente se trate de un tema de bom.

2. Si ya inicias sesión ahí, ¿por qué también inicias sesión en los archivos que incluyes en ese mismo script? Es decir, los errores de "a session had already been started" es porque evidentemente haces uso de session_start() más de una vez en ejecución.

No es necesario hacerlo por cada script, sólo debes hacerlo una vez y ninguna más, ¿me explico?
+1
__________________
Salu2!
  #38 (permalink)  
Antiguo 21/07/2013, 18:20
 
Fecha de Ingreso: julio-2013
Mensajes: 53
Antigüedad: 10 años, 9 meses
Puntos: 1
Perdonad, pero me va un poco lento. Al fin lo saqué:

web.php: http://pastebin.com/8hggiymh
recepcion.php: http://pastebin.com/CYDNCU8E

Respectoal punto 2 me enseñaron a hacerlo así. Incluídos los libros de programación de PHP que leí.

Última edición por Triby; 21/07/2013 a las 20:47
  #39 (permalink)  
Antiguo 21/07/2013, 18:28
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Pérdida de la sesión (II)

Cita:
Iniciado por fcotorgi Ver Mensaje
Respectoal punto 2 me enseñaron a hacerlo así. Incluídos los libros de programación de PHP que leí.
Si sólo usas un script en cada petición está bien, pero piensa que si el script "padre" ya inicia sesión, ¿por que los scripts "hijos" que incluyes deberían hacerlo también?

Eso es cuestión de sentido común, los manuales jamás te van a enseñar eso.

¿Te hace sentido iniciar sesión en cada script a pesar de que los incluyes en otros scripts que inician sesión también?

Suena enredado, ¿no te parece?
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #40 (permalink)  
Antiguo 21/07/2013, 18:33
 
Fecha de Ingreso: julio-2013
Mensajes: 53
Antigüedad: 10 años, 9 meses
Puntos: 1
Respuesta: Pérdida de la sesión (II)

Ok. Probaré. Gracias.

No obstante, creo que el problema va a estar en la codificación UTF-8.

Es ya muy tarde acá. Si me lo permitís, me voy a la cama...

...os agradezco vuestra ayuda y vuestra paciencia. De verdad.

Ciao.
  #41 (permalink)  
Antiguo 21/07/2013, 20:50
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Pérdida de la sesión (II)

Cita:
No obstante, creo que el problema va a estar en la codificación UTF-8
Como no había información de los errores que obtenías, pensé en la posibilidad de la codificación, pero estaba equivocado, no va por ahí la cosa y no conté cuantas veces te dijo pateketrueke el origen de los errores, pero tiene razón, debes revisar y corregir tu lógica, porque todos esos session_start() que tú dices que están bien puestos... no, no lo están.

P.D. No publiques dos o más mensajes consecutivos, si necesitas agregar algo, puedes editar el último.
__________________
- León, Guanajuato
- GV-Foto
  #42 (permalink)  
Antiguo 22/07/2013, 03:15
 
Fecha de Ingreso: julio-2013
Mensajes: 53
Antigüedad: 10 años, 9 meses
Puntos: 1
Respuesta: Pérdida de la sesión (II)

Me estoy volviendo loco. He quitado el BOM y todos los session_start que encabezan los ficheros, excepto los que están en las funciones iniciar_sesion() y terminar_sesion(). Sigue pasándome lo mismo. Si me decís que están mal, de acuerdo... pero no lo veo. No están después de escribir algo... aunque ya no estoy seguro. Mil ojos ven más que dos, pero no veo que escriba nada antes de llamar a esas funciones y abrir la sesión.
  #43 (permalink)  
Antiguo 22/07/2013, 03:41
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Pérdida de la sesión (II)

Sin las técnicas de depuración adecuadas jamás vas a ver, y nosotros peor aún, veremos menos que nada.

Como no podemos ejecutar tu código ni depurarlo te toca ir revisando poco a poco el flujo de tu aplicación para ver dónde ocurre el problema, siento que ni millones de ojos pueden ver lo que tu actualmente no muestras.

Leer código sirve de nada.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #44 (permalink)  
Antiguo 22/07/2013, 04:19
 
Fecha de Ingreso: julio-2013
Mensajes: 53
Antigüedad: 10 años, 9 meses
Puntos: 1
Respuesta: Pérdida de la sesión (II)

Sí... gracias de todos modos. No quiero robaros más tiempo. Cuando encuentre la causa la publicaré.
  #45 (permalink)  
Antiguo 22/07/2013, 06:28
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Pérdida de la sesión (II)

Creo que desde hace muchos mensajes encontramos la causa: Más de un session_start(); se ejecuta en tus scripts, pero tú dices que están bien puestos.

Sugerencia:

Supongo que tienes un archivo que incluyes en todos tus scripts, ya sea de conexión a base de datos, configuración, funciones comunes, etc.

Coloca ahí la línea session_start(); y elimínala en todos los demás archivos, asegurándote de que no hay una salida previa (caracter, espacio en blanco, salto de línea, etc.).
__________________
- León, Guanajuato
- GV-Foto
  #46 (permalink)  
Antiguo 23/07/2013, 16:09
 
Fecha de Ingreso: julio-2013
Mensajes: 53
Antigüedad: 10 años, 9 meses
Puntos: 1
Respuesta: Pérdida de la sesión (II)

¿Queréis saber algo divertido? En localhost me funciona perfectamente y pasa las sesiones sin problemas.

El mismo código, al hacerlo desde 1and1, no me las pasa.

je :P
  #47 (permalink)  
Antiguo 23/07/2013, 16:18
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Pérdida de la sesión (II)

Realmente no es tan divertido, eso es porque en localhost tal vez tienes configurado tu PHP para no iniciar salida hasta haber recibido encabezados específicos o cierta cantidad de caracteres: output buffering

Y, debo insistir, no es divertido.
__________________
- León, Guanajuato
- GV-Foto
  #48 (permalink)  
Antiguo 23/07/2013, 16:31
 
Fecha de Ingreso: julio-2013
Mensajes: 53
Antigüedad: 10 años, 9 meses
Puntos: 1
Respuesta: Pérdida de la sesión (II)

Quité todos los session_start(), cree un método de la clase Web:

Código PHP:
Ver original
  1. public function iniciar_sesion(){
  2.         session_start();
  3.     }

a la que llamo en las páginas así:

Código PHP:
Ver original
  1. <?php
  2. $web = new Galeria(AUTOR,
  3.                    FECHA_CREACION,
  4.                    FECHA_MODIFICACION,
  5.                    VERSION);
  6.  
  7. $web->iniciar_sesion();
  8.  
  9. $web->escribir_doctype();
  10. $web->iniciar_html();
  11.     $web->escribir_head();
  12.     $web->iniciar_body();
  13.         $web->escribir_capa_superpuesta();
  14.         $web->iniciar_contenedor();
  15.             $web->iniciar_encabezamiento();
  16.                 $web->escribir_menu_superior();
  17.                 $web->escribir_mensaje_de_informacion('');
  18.                 $web->escribir_mensaje_de_aviso('');
  19.                 $web->escribir_mensaje_de_exito('');
  20.                 $web->escribir_mensaje_de_error('');
  21.             $web->finalizar_encabezamiento();
  22.             $web->iniciar_columna_central();
  23.                 $web->iniciar_columna_izquierda();
  24.                     $web->titular_columna_izquierda(TITULO, SUBTITULO);
  25.                     $web->escribir_columna_izquierda();
  26.                     $web->indexar_inicio(HAY_ENLACE_AL_INICIO);
  27.                 $web->finalizar_columna_izquierda();
  28.                 $web->iniciar_columna_derecha();
  29.                     $web->escribir_columna_derecha();
  30.                 $web->finalizar_columna_derecha();
  31.             $web->finalizar_columna_central();
  32.         $web->finalizar_contenedor();
  33.     $web->finalizar_body();
  34.  $web->finalizar_html();
  35. ?>

Respecto al ouptut buffering... me he perdido un poco... ¿cuáles serían las variables que tendría que mirar en mi php.ini local para saber si "no inicio salida hasta haber recibido encabezados específicos"?

Gracias una vez más, Triby.
  #49 (permalink)  
Antiguo 23/07/2013, 16:36
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Pérdida de la sesión (II)

En el enlace que te dejé puedes ingresar a Runtime Configuration (Configuración en tiempo de ejecución) y ahí verás las variables involucradas.
__________________
- León, Guanajuato
- GV-Foto
  #50 (permalink)  
Antiguo 23/07/2013, 18:03
 
Fecha de Ingreso: julio-2013
Mensajes: 53
Antigüedad: 10 años, 9 meses
Puntos: 1
Respuesta: Pérdida de la sesión (II)

El problema está ya solucionado. Revisando de nuevo la codificación UTF de los archivos, he visto que Web.php seguía estando codificada como UTF-8 con BOM.

Con notepad++ lo guardé como UTF sin BOM y... voilà!

Gracias por vuestra ayuda y disculpadme si os he cansado con este tema.

Etiquetas: perdida, sesión
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 11:57.