Foros del Web » Programando para Internet » PHP »

Error Cannot send session cache limiter, producido por un include dentro de un div

Estas en el tema de Error Cannot send session cache limiter, producido por un include dentro de un div en el foro de PHP en Foros del Web. Muy buenas a todos. Tengo un problema, creo que detectado, pero no se solucionarlo.Os cuento. Tengo una pagina php (cabecera.php) en la que abro una ...
  #1 (permalink)  
Antiguo 18/01/2011, 13:15
Avatar de julliop  
Fecha de Ingreso: septiembre-2006
Ubicación: Asturias, patria querida
Mensajes: 42
Antigüedad: 17 años, 7 meses
Puntos: 0
Error Cannot send session cache limiter, producido por un include dentro de un div

Muy buenas a todos. Tengo un problema, creo que detectado, pero no se solucionarlo.Os cuento.

Tengo una pagina php (cabecera.php) en la que abro una session (session_start) y doy valores a variables de sesion y más php, que me funciona bien, sin error "Cannot send session cache limiter".

Aparte tengo otra pagina php (principal.php) en la que inserto cabecera.php mediante un include dentro de un div. es entonces cuando me da este error:

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at C:\Domains\xxxxxxxxxxxxxxxxxxx\wwwroot\pro\princip al.php:8) in C:\Domains\xxxxxxxxxxxxxxxxxxxxx\wwwroot\pro\cabec era.php on line 1

Tras leer varios hilos, supuse que el error se producía porque antes del codigo php(session_start de cabecera) de principal no debe ir codigo html(ninguna respuesta al cliente). y así lo hize, poniendo el include(php) al principio de principal.php no me da el warning, pero claro, pierdo todo el formato de la página...

soluciones...

pongo el código de cabecera:

Código PHP:
Ver original
  1. <?php
  2. if (isset($_SESSION["nickSesion"]))
  3. {
  4. $mensaje1='<p>Bienvenido a nuestra web '.$_SESSION["nickSesion"].'.</p>';
  5.     }
  6.     else if ( isset( $_POST['enviar']))
  7.     {
  8.     ....

... y el código de principal(como me da el error):

Código PHP:
Ver original
  1. <html>
  2. <head>
  3. <title>Problema</title>
  4. <link rel="StyleSheet" href="estilos.css" type="text/css">
  5. </head>
  6. <body>
  7. <div id="centro">
  8. <?php
  9. include ('cabecera.php');
  10. ?>
  11. <table class="tablaPrincipal">
  12.             <tr>
  13.                 <td width="640px">
  14.                         <img src="./fotos/elforoToprural.jpg">
  15.                 </td>
  16.                 <td width="260px">
  17.                         noticias                        
  18.                 </td>
  19.             </tr>
  20.      </table>
  21. </div>
  22. </body>
  23. </html>


Gracias
  #2 (permalink)  
Antiguo 18/01/2011, 13:23
Avatar de silvanha  
Fecha de Ingreso: marzo-2006
Ubicación: En mi mundo de sueños
Mensajes: 653
Antigüedad: 18 años, 1 mes
Puntos: 65
Respuesta: Error Cannot send session cache limiter, producido por un include dentro d

pues eso mismo, saca el session_start(); de cabecera, imagino que lo pones ahí porque hasta ahí utilizas las variables, pero es regla que lo debes poner al principio.. así que sacalo de cabecera, y ponlo arriba.. en principal, o crea otro archivo que se llame sesion.php y agregalo ahí (que lo veo de más la verdad xD) peeero no hay de otra.. o no veo porque te estas liando...



saludos!
__________________
●•· No hay nada imposible..
●•· Vico-X.. ;)
  #3 (permalink)  
Antiguo 18/01/2011, 13:36
Avatar de julliop  
Fecha de Ingreso: septiembre-2006
Ubicación: Asturias, patria querida
Mensajes: 42
Antigüedad: 17 años, 7 meses
Puntos: 0
Respuesta: Error Cannot send session cache limiter, producido por un include dentro d

Pues si que era sencillo....

permite dos preguntillas silvanha:

1. ¿Es del todo correcto hacer un session_start(); si puede que no haya sesion?es decir principal es una pagina como esta en la que estamos, en la que se puede estar sin iniciar sesion.

2. quiero poner un $_SERVER['PHP_SELF'] dentro del action de un form, lo uso así:

Código HTML:
Ver original
  1. <form method="post" action="<?php $_SERVER['PHP_SELF'];?>" name="inicioSesion">

pero no me funciona, me manda a la direccion que tuviese que ir /<?php $_SERVER['PHP_SELF'];?>

mientras que si lo saco del action sí funciona.

Saludos y muchas gracias.
  #4 (permalink)  
Antiguo 18/01/2011, 13:48
Avatar de silvanha  
Fecha de Ingreso: marzo-2006
Ubicación: En mi mundo de sueños
Mensajes: 653
Antigüedad: 18 años, 1 mes
Puntos: 65
Respuesta: Error Cannot send session cache limiter, producido por un include dentro d

Si era sencillo :P

Y de tus preguntas.. la primera, el session_star() te permite usar las variables de tipo sesion que vayas creando, el hecho de que se usen para corroborar el inicio de sesion, es un uso que se les da, así que si tienes por ahí alguna variable que necesites, pues si inicias sesión.. en caso contrario no.

De la segunda, te recomiendo leer el manual de PHP, la variable $_SERVER['PHP_SELF']; contiene la ruta del archivo actual en el que se esta ejecutando el script, entonces la duda es, hacia donde lo quieres enviar???

Saluditos! ;)
__________________
●•· No hay nada imposible..
●•· Vico-X.. ;)
  #5 (permalink)  
Antiguo 18/01/2011, 17:42
Avatar de julliop  
Fecha de Ingreso: septiembre-2006
Ubicación: Asturias, patria querida
Mensajes: 42
Antigüedad: 17 años, 7 meses
Puntos: 0
Respuesta: Error Cannot send session cache limiter, producido por un include dentro d

Cita:
Iniciado por silvanha Ver Mensaje

De la segunda, te recomiendo leer el manual de PHP, la variable [URL="http://php.net/manual/en/reserved.variables.server.php"]$_SERVER['PHP_SELF'];[/URL] contiene la ruta del archivo actual en el que se esta ejecutando el script, entonces la duda es, hacia donde lo quieres enviar???

Saluditos! ;)
ya lo había repasao y creo que se como utilizarlo, mi problema es que en la línea de codigo que te comento, no se me implementa como php y me da error al enviar el formulario, pero bueno, quizas no sea el sitio adecuado para tratar el problema...

saludos y más gracias
  #6 (permalink)  
Antiguo 19/01/2011, 09:24
Avatar de silvanha  
Fecha de Ingreso: marzo-2006
Ubicación: En mi mundo de sueños
Mensajes: 653
Antigüedad: 18 años, 1 mes
Puntos: 65
Respuesta: Error Cannot send session cache limiter, producido por un include dentro d

que tipo de error te marca?
__________________
●•· No hay nada imposible..
●•· Vico-X.. ;)
  #7 (permalink)  
Antiguo 19/01/2011, 09:49
Avatar de julliop  
Fecha de Ingreso: septiembre-2006
Ubicación: Asturias, patria querida
Mensajes: 42
Antigüedad: 17 años, 7 meses
Puntos: 0
Respuesta: Error Cannot send session cache limiter, producido por un include dentro d

después de revisar mis codigos y hacer alguna prueba, el problema no es que no funcione la sentencia en el action del form. Es que ese form está en una .php(logearse), que a su vez está dentro de otro .php(cabecera), que a su vez está dentro de principal.php con lo cual si ese action no lo direcciono a principal.php, no me funciona. el error que me da es que me redirecciona a esta dirección:

http://localhost:8888/pro/<?php $_SERVER['PHP_SELF'];?>

pero ahora al copiarla y pegarla me pega esto:

http://localhost:8888/pro/%3C?php%20$_SERVER[%27PHP_SELF%27];?%3E

vaya cosa rara no? saludos y gracias
  #8 (permalink)  
Antiguo 19/01/2011, 10:02
Avatar de silvanha  
Fecha de Ingreso: marzo-2006
Ubicación: En mi mundo de sueños
Mensajes: 653
Antigüedad: 18 años, 1 mes
Puntos: 65
Respuesta: Error Cannot send session cache limiter, producido por un include dentro d

jejeje, tan simple como ponerle un echo xD

Código PHP:
Ver original
  1. <?php echo $_SERVER['PHP_SELF'];?>

le dices que ponga eso, pues eso pone, no le dices que imprima el valor como tal de la variable ;)

y te lo pega así porque te traduce los espacios y los caracteres extras.. es decir, que le estas diciendo al navegador que la dirección es esa..

saluditos! :)
__________________
●•· No hay nada imposible..
●•· Vico-X.. ;)
  #9 (permalink)  
Antiguo 19/01/2011, 10:17
Avatar de julliop  
Fecha de Ingreso: septiembre-2006
Ubicación: Asturias, patria querida
Mensajes: 42
Antigüedad: 17 años, 7 meses
Puntos: 0
Respuesta: Error Cannot send session cache limiter, producido por un include dentro d

no, el error no es ese, ya lo había probado antes, se me olvidó comentarlo, y lo acabo de volver a probar y nada.

Cuando da el error, el navegador me devuelve una pagina que pone ésto:

The requested URL /pro/< was not found on this server.

lo que me lleva a pensar, que no llega a la sentencia echo...
  #10 (permalink)  
Antiguo 19/01/2011, 10:26
Avatar de silvanha  
Fecha de Ingreso: marzo-2006
Ubicación: En mi mundo de sueños
Mensajes: 653
Antigüedad: 18 años, 1 mes
Puntos: 65
Respuesta: Error Cannot send session cache limiter, producido por un include dentro d

Supongo que algo estas poniendo mal, porque yo lo acabo de probar y si funciona (me hiciste dudar ¬¬')

Código PHP:
Ver original
  1. <form method="post" action="<?php echo $_SERVER['PHP_SELF'];?>" name="inicioSesion">
  2. <input type="submit" value="probar">
  3. </form>

también necesitas checar, a donde te esta mandando, si tienes varias páginas PHP incrustadas en una sola, verifica a donde realmente te esta mandando.. :)
__________________
●•· No hay nada imposible..
●•· Vico-X.. ;)
  #11 (permalink)  
Antiguo 19/01/2011, 10:48
Avatar de julliop  
Fecha de Ingreso: septiembre-2006
Ubicación: Asturias, patria querida
Mensajes: 42
Antigüedad: 17 años, 7 meses
Puntos: 0
Respuesta: Error Cannot send session cache limiter, producido por un include dentro d

A ver,

la pagina en la que tengo dicho form, usándola directamente, me funciona bien.
El problema es cuando la introduzco(la pagina entera mediante un include) en otra .php, que es cuando me saca dicho error...
  #12 (permalink)  
Antiguo 19/01/2011, 10:56
Avatar de silvanha  
Fecha de Ingreso: marzo-2006
Ubicación: En mi mundo de sueños
Mensajes: 653
Antigüedad: 18 años, 1 mes
Puntos: 65
Respuesta: Error Cannot send session cache limiter, producido por un include dentro d

manda a imprimir la variable fuera del form, o ve el código para ver que te esta imprimiendo realmente..

imagino que es porque la agregas con el include
__________________
●•· No hay nada imposible..
●•· Vico-X.. ;)
  #13 (permalink)  
Antiguo 19/01/2011, 11:08
Avatar de julliop  
Fecha de Ingreso: septiembre-2006
Ubicación: Asturias, patria querida
Mensajes: 42
Antigüedad: 17 años, 7 meses
Puntos: 0
Respuesta: Error Cannot send session cache limiter, producido por un include dentro d

he probado a introducir la sentencia (<?php echo $_SERVER ['PHP_SELF'];?>) fuera del form, cargando esa única página, funciona bien, pero cargándola desde otra(mediante el include) no muestra nada.

Es el include, quien modifica el uso. ¿Alguna solución aparte de cargarme el include y meter todo el código a mano?

Gracias por la atención
  #14 (permalink)  
Antiguo 19/01/2011, 11:12
Avatar de silvanha  
Fecha de Ingreso: marzo-2006
Ubicación: En mi mundo de sueños
Mensajes: 653
Antigüedad: 18 años, 1 mes
Puntos: 65
Respuesta: Error Cannot send session cache limiter, producido por un include dentro d

podrías traer algo de tu código.. ando a tientas.. u.u'
__________________
●•· No hay nada imposible..
●•· Vico-X.. ;)
  #15 (permalink)  
Antiguo 19/01/2011, 12:18
Avatar de julliop  
Fecha de Ingreso: septiembre-2006
Ubicación: Asturias, patria querida
Mensajes: 42
Antigüedad: 17 años, 7 meses
Puntos: 0
Respuesta: Error Cannot send session cache limiter, producido por un include dentro d

xD
muy sencillo:
logearse.php
Código PHP:
Ver original
  1. <html>
  2. <head>
  3. <link rel="StyleSheet" href="estilos.css" type="text/css">
  4.  
  5. </head>
  6. <body>
  7. <form method="post" action="principal.php" name="inicioSesion">  <!--está puesto principal para que funcione -->
  8.         <p class="sinMargen">Email <input type="text" name="email" size="20"/></p>
  9.                 <?php echo $_SERVER ['PHP_SELF'];?>
  10.  
  11.         <p class="sinMargen">Contrase&ntilde;a <input type="password" name="clave" size="20"/></p>
  12.         <p class="sinMargen"><input type="submit" class="submit" name="enviar" value="Entrar" /></p>
  13. </form>
  14. </body>
  15. </html>

cabecera.php (contiene logearse.php)
Código PHP:
Ver original
  1. <?php
  2. if (isset($_SESSION["nickSesion"]))
  3. {
  4. $mensaje1='<p>Bienvenido a nuestra web '.$_SESSION["nickSesion"].'.</p>';
  5.     }
  6.     else if ( isset( $_POST['enviar']))
  7.     {
  8.         if ($conexionServidor=mysql_connect("localhost","julio","alonso"))  //conexion al servidor
  9.         {
  10.             if($conexionBBDD=mysql_select_db("pro",$conexionServidor))  //conexion a la base de datos
  11.             {    
  12.                 if($consulta=mysql_query("select nick from usuario where (email='$_POST[email]')", $conexionServidor) ) //consulta a la base de datos
  13.                 {
  14.                     $muestra=mysql_fetch_array($consulta); //el usuario esta dentro, en $muestra se guarda un array con el resultado
  15.                  
  16.                     if($muestra['nick']=="")
  17.                     {
  18.                         $mensaje1= '<p>El email introducido no está registrado <br>
  19.                                    Haga click <a href="registro.php">AQUI</a>para registrarse</p>';
  20.                         $mensaje2= file('logearse.php');
  21.        
  22.                     }
  23.                     else if($consulta=mysql_query("select nick from usuario where (email='$_POST[email]' && clave='$_POST[clave]')", $conexionServidor) ) //consulta a la base de datos
  24.                     {
  25.                         $muestra=mysql_fetch_array($consulta);
  26.                      
  27.                         if($muestra['nick']=="")
  28.                         {
  29.                             $mensaje1='<p>La contrasena introducida no es correcta.</p>';
  30.                             $mensaje2= file('logearse.php');
  31.                         }              
  32.                         else
  33.                         {
  34.                             $mensaje1='<p>Bienvenido a nuestra web '.$muestra['nick'].$id.'.</p>';
  35.                            
  36.                             $_SESSION["nickSesion"] = $muestra['nick'];     //Introduzco en la variable de session el nick del usuario, al principio de la pagina se comprobara si existe y puede que se muestre.
  37.                                              
  38.                         }
  39.                     }
  40.                     else
  41.                     {
  42.                         //error en la consulta
  43.                         $mensaje1='<p>Se ha producido un error en la consulta, intentelo mas tarde.</p>';
  44.                         $mensaje2= file('logearse.php');
  45.                     }
  46.                 }
  47.                 else
  48.                 {
  49.                     //error en la consulta
  50.                     $mensaje1='<p>Se ha producido un error en la consulta, intentelo mas tarde.</p>';
  51.                     $mensaje2= file('logearse.php');                    
  52.                 }
  53.             }
  54.             else
  55.             {
  56.                //error en la base de datos
  57.                 $mensaje1='<p>Se ha producido un error en la base de datos, intentelo mas tarde.</p>';
  58.                 $mensaje2= file('logearse.php');
  59.             }
  60.         }
  61.         else
  62.         {
  63.             //error en la conexion al servidor
  64.             $mensaje1='<p>Se ha producido un error en el servidor, intentelo mas tarde.</p>';
  65.             $mensaje2= file('logearse.php');
  66.         }    
  67.         mysql_close($conexionServidor);
  68.     }
  69.     else
  70.     {
  71.         $mensaje1='<a href="registro.php">Registrate</a> para recibir informacion y ofertas, mira las <a href="ventajas.html">ventajas</a>';
  72.         $mensaje2= file('logearse.php');                
  73.     }
  74. ?>
  75. <html>
  76. <head>
  77. <title>Problema</title>
  78. <link rel="StyleSheet" href="estilos.css" type="text/css">
  79. </head>
  80. <body>
  81. <!--<div id="centro">-->        
  82. <div id="registro">
  83.     <table class="tablaLogearse">
  84.         <tr>
  85.             <td>
  86.                 <?php
  87.                     echo $mensaje1;
  88.                 ?>  
  89.             </td>
  90.             <td align="right">
  91.                 <?php
  92.                 if (isset($mensaje2))
  93.                 {
  94.                     foreach ($mensaje2 as $mensaje2b)
  95.                     {
  96.                         echo $mensaje2b;
  97.                     }  
  98.                 }
  99.                 ?>  
  100.             </td>
  101.         </tr>
  102.          
  103.     </table>
  104. </div>        
  105. <div id="cabecera">
  106.     Apartamentos El FORO
  107. </div>
  108. <ul id="menuhorizontal">
  109. <li><a href="principal.php">*Inicio</a></li>
  110. <li><a href="apartamentos.php">*Apartamentos</a></li>
  111. <li><a href="">*Galeria</a></li>
  112. <li><a href="">*Entorno</a></li>
  113. <li><a href="">*Agenda</a></li>
  114. <li><a href="">*Localizacion</a></li>
  115. <li><a href="">*Contacto</a></li>
  116. <li><a href="">*Tarifas</a></li>
  117. <li><a href="">*Noticias</a></li>
  118. </ul>
  119.  
  120. </body>
  121. </html>

principal.php (contiene cabecera.php):
Código PHP:
Ver original
  1. <?php
  2. ?>
  3. <html>
  4. <head>
  5. <title>Problema</title>
  6. <link rel="StyleSheet" href="estilos.css" type="text/css">
  7. </head>
  8. <body>
  9. <div id="centro">
  10. <?php
  11. include ('cabecera.php');
  12. ?>
  13. <table class="tablaPrincipal">
  14.             <tr>
  15.                 <td width="640px">
  16.                         <img src="./fotos/elforoToprural.jpg">
  17.                 </td>
  18.                 <td width="260px">
  19. <?php echo $_SERVER['PHP_SELF'];?>                </td>
  20.             </tr>
  21.      </table>
  22. </div>
  23. </body>
  24. </html>

lo dicho, muchas gracias
  #16 (permalink)  
Antiguo 19/01/2011, 13:02
Avatar de silvanha  
Fecha de Ingreso: marzo-2006
Ubicación: En mi mundo de sueños
Mensajes: 653
Antigüedad: 18 años, 1 mes
Puntos: 65
Respuesta: Error Cannot send session cache limiter, producido por un include dentro d

veo que usas file.. y te regresa el contenido del archivo como un arreglo.. estuve haciendo una prueba, para ver como lo devolvía, y no creo que sea la mejor manera de leerlo, porque te lo lee como contenido, es decir PHP no te interpreta el $_SERVER ['PHP_SELF']..

Yo lo movería así:

en cabecera.php:
Código PHP:
Ver original
  1. $mensaje1='<p>Se ha producido un error en la consulta, intentelo mas tarde.</p>';
  2. $mensaje2 = "logearse.php";

después de toda la validación:

Código PHP:
Ver original
  1. if (isset($mensaje2))
  2.                 {
  3.                 include($mensaje2);
  4.                     }

Y lo demás tal cual esta, ya probe y funciona como debe :) es decir, usa include.. en todos lados jajajaja y ya ;)

xoxo! ;)
__________________
●•· No hay nada imposible..
●•· Vico-X.. ;)
  #17 (permalink)  
Antiguo 19/01/2011, 17:21
Avatar de julliop  
Fecha de Ingreso: septiembre-2006
Ubicación: Asturias, patria querida
Mensajes: 42
Antigüedad: 17 años, 7 meses
Puntos: 0
Respuesta: Error Cannot send session cache limiter, producido por un include dentro d

Como bien decías, funciona correctamente, sigo con la aplicación. Puedes comprobar que soy novato. Pondré más dudas, que las tengo.... xD ... espero tu ayuda como la del resto de la comunidad!!

Saludos y muchas gracias!!
  #18 (permalink)  
Antiguo 20/01/2011, 10:03
Avatar de silvanha  
Fecha de Ingreso: marzo-2006
Ubicación: En mi mundo de sueños
Mensajes: 653
Antigüedad: 18 años, 1 mes
Puntos: 65
Respuesta: Error Cannot send session cache limiter, producido por un include dentro d

por nada, y si, aquí andaremos para echarte una mano..

saludos! :)
__________________
●•· No hay nada imposible..
●•· Vico-X.. ;)

Etiquetas: include, session_start
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 19:30.