1. ¡OFERTA! con cupón "DIRVPS": hosting por $0,01 y también VPS Linux y Windows por $0,01 el primer mes por Interserver ← publi
    Descartar aviso
Descartar aviso
Al usar este sitio web, aceptas que nosotros y nuestros socios podamos establecer cookies para fines tales como personalizar el contenido y la publicidad. Más información.

Error PHP: Warning: session_start() Cannot send session cookie - headers already sent

Tema en 'Programación y Diseño Web' iniciado por Apolo, 23 May 2007.

  1. Apolo

    Apolo Administrador Miembro del Staff Administrador CH

    El mensaje de error completo puede ser similar a este:

    Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by

    Ver también:

    Warning: Cannot modify header information - headers already sent by

    Warning: session_start(): Cannot send session cache limiter - headers already sent

    Solución 1

    Este error se presenta habitualmente porque en el script PHP existen espacios o caracteres extraños antes o después del código PHP.

    Para solucionarlo, debe revisar que no existan espacios, saltos de línea o caracteres antes de:

    <?

    (donde comienza el script PHP)

    Y que no existan también después de:

    ?>

    (donde finaliza el script o archivo PHP)

    Incluso esa etiqueta de cierre de código se puede omitir, no es necesaria.

    Esto debe hacerse en el script que está generando el error. Sabrá cuál es pues el mensaje de advertencia menciona el script o archivo que está generando el error.

    Solución 2

    En algunas ocasiones el error puede aparecer porque la configuración de PHP en el servidor tiene activa (en On) la directiva display_errors

    Al apagar (poner en Off) la directiva display_errors, el error puede desaparecer. Esta directiva se puede modificar mediante un archivo .htaccess o php.ini. Mediante .htaccess, se puede hacer poniendo una línea de este modo:

    php_value display_errors "Off"

    Ante alguna duda, lo más recomendable es pedir asistencia al proveedor de hosting o a la persona encargada de la administración del servidor o cuenta de hosting.

    Solución 3

    session_start() debe ser ejecutado antes de cualquier salida HTML porque envía headers HTTP al navegador. Pida a un desarrollador en PHP que edite el código para solucionarlo.
     
    A Rami le gusta esto.
  2.  
  3. zardonkan

    zardonkan Usuario activo

    Solucion 4 en windows muchas veces el php.ini hay que modificar la parte
    CODE, HTML o PHP Insertado:
    session.save_path ="F:\AppServ\php\session"
    inficandole el directorio y a la vez verificar si esta creado .

    jejejese lo dijo por experiencia .
     
  4. antonio2

    antonio2 Nuevo usuario

    Ola, estoy teniendo lo mismo problema y ya he leido muchos pero todavia no hago idea porque me lo esta mostrando.
    Agradeceria mucho si alguien me pudera ayudar con este problema

    Aqui estan los mensages:

    Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at /home/inmo/public_html/ses.php:1) in /home/inmo/public_html/ses.php on line 23

    Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /home/inmo/public_html/ses.php:1) in /home/inmo/public_html/ses.php on line 23


    Aqui esta el codigo:

    PHP:
    <?

    //Digite o nome do host do seu servidor, geralmente � "localhost".
    $db_host "localhost";

    //Digite o nome de usu�rio do banco de dados MYSQL
    $db_username "inmo";

    //Digite a senha do banco de dados
    $db_password "1111";

    //Digite o nome do banco de dados
    $db_name "inmo";

    //Digite a URL (endere�o) principal do site, onde est� o arquivo index.php
    $site_url "//inmo.com";


    $connection mysql_connect($db_host$db_username$db_password) or die(mysql_error());

    $db mysql_select_db($db_name$connection);

    session_start();

    $t time();

    ?>

    <?

    $q1 
    "update re2_agents set AccountStatus = 'pending' where ExpDate <= '$t' and AccountStatus != 'pending' ";
    mysql_query($q1) or die(mysql_error());

    //get the settings
    $qset "select * from re2_settings";
    $rset mysql_query($qset) or die(mysql_error());
    $aset mysql_fetch_array($rset);

    ?>

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">

    <html xmlns="w3.org/1999/xhtml">
    <head>
        <title><?=$aset[SiteTitle]?></title>
        <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=utf-8">
        <META NAME="DESCRIPTION" CONTENT="<?=$aset[SiteDescription]?>">
        <META NAME="KEYWORDS" CONTENT="<?=$aset[SiteKeywords]?>">
    </head>

    <body>

    test
    </body>

    </html>
     
  5. Apolo

    Apolo Administrador Miembro del Staff Administrador CH

    Hola antonio2,

    Precisamente el punto 3 de mi mensaje creo que es el que aplica en tu caso. El mismo mensaje de error te menciona la línea 23 y allí encontramos esto:

    session_start();

    Saludos,
     
  6. antonio2

    antonio2 Nuevo usuario

    Gracias Apolo por su respuesta, pero eso es lo que no entiendo, para mi no hay ningun HTML sendo enviado al navegador antes, solamente crio unas variables:

    $db_host = "localhost";

    //Digite o nome de usu�rio do banco de dados MYSQL
    $db_username = "inmo";

    //Digite a senha do banco de dados
    $db_password = "1111";

    //Digite o nome do banco de dados
    $db_name = "inmo";

    //Digite a URL (endere�o) principal do site, onde est� o arquivo index.php
    $site_url = "//inmo.com";


    $connection = mysql_connect($db_host, $db_username, $db_password) or die(mysql_error());

    $db = mysql_select_db($db_name, $connection);


    De cualquier forma, ya intente pasar la session_start() para a primera linea del codigo y sigue el error.

    Agradezco su colaboracion
     
  7. Minervah

    Minervah Usuario activo

    Comprueba que el script se conecta correctamente a la base de datos, en caso de que no sea posible supongo que ese die(mysql_error()) estará enviando contenido al navegador.

    ¿Esas dos barras (//) que tienes en la variable $site_url son correctas?
     
  8. antonio2

    antonio2 Nuevo usuario

    Gracias Minervah por su colaboracion.

    La coneccion con el banco esta bien, en el codigo anterior yo cambie los valores de las variables para no exponerlas.
    Lo que pasa es que tengo el codigo en 2 servidores, uno pago y uno gratis. En el gratis la pagina funciona sin warnings y sin problemas y en el pago el contrario. Para mi es raro esto, porque ya he leido algo sobre y una solucion para los warnings fue desahbilitar los errores en .htaccess y listo saco los warnings, pero cuando trataba de entrar en la parte administrativa me direccionaba una pagina en blanco. Creo q es porque cuando trato de entrar en la parte admin se crearian la sesion ($_SESSION[AgentID] = $a1[AgentID];).
    Ya he hablado con el soporte del servidor pago y ellos dijeron que era algo de programacion y q no podrian ayudar, pero que la solucion estaba en phpinfo(). Imagino yo que tenga que habilitar o deshabilitar algunos de los parametros alla, pero no se cual ni como.

    Saludos
     
  9. Apolo

    Apolo Administrador Miembro del Staff Administrador CH

    No sé qué clase de respuesta te han dado, pero phpinfo() muestra, precisamente, información, pero no soluciona nada en sí mismo.

    En todo caso, si el asunto es que en un servidor te funciona y en otro no, puedes subir un archivo PHP que contenga phpinfo() a ambos servidores y así comparas los valores en cada caso para cada directiva. Así podrás saber cuáles valores son diferentes, para que procedas a ajustarlos en el servidor en el que no te funciona ese código.

    Saludos,
     
  10. antonio2

    antonio2 Nuevo usuario

    Gracias Apolo.

    Yo ya he hecho la comparacion, pero sigo sin saber cual(es) de todo(s) cambiar y como cambiarlo(s). Ya he leido que algunas personas usan SSH, pero el plan que tengo no me da esta opcion.

    Saludos,
     
  11. Apolo

    Apolo Administrador Miembro del Staff Administrador CH

    No necesitas acceso SSH.

    Busca las directivas más relevantes, que son las que aparecen en la primera parte del resultado de phpinfo() y ya por allí puedes empezar a probar.

    Saludos,
     
  12. antonio2

    antonio2 Nuevo usuario

    Apolo,

    No se como cambiarlas para poderlas probar.

    Saludos
     
  13. Apolo

    Apolo Administrador Miembro del Staff Administrador CH

    Si PHP está instalado como módulo de Apache, con un archivo .htaccess

    Si está instalado como CGI, con un archivo php.ini

    En eso sí que debería ayudarte tu proveedor de hosting. Si no lo hacen, mejor ve buscando otro, pues es una consulta muy básica de soporte.

    Saludos,
     
  14. antonio2

    antonio2 Nuevo usuario

    Gracias Apolo y Minervah por la ayuda.

    Pase dos dias peleando con el problema y en fin lo solucione cambiando el encoding de utf-8 de las paginas para ANSI.
    Eso saco todos los warnings.

    Saludos
     
  15. yosandra

    yosandra Nuevo usuario

    Hola,saludos a todos,encontré el foro buscando por este error.
    A mí me aparece esto mismo:

    CODE, HTML o PHP Insertado:
    Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at /home/vol5/zobyhost.com/zoby_4565643/htdocs/includes/scripts_rw.php:63) in /home/vol5/zobyhost.com/zoby_4565643/htdocs/modules/Video_Stream/functions.php on line 223
    Y:

    CODE, HTML o PHP Insertado:
    Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /home/vol5/zobyhost.com/zoby_4565643/htdocs/includes/scripts_rw.php:63) in /home/vol5/zobyhost.com/zoby_4565643/htdocs/modules/Video_Stream/functions.php on line 223
    En la línea en cuestión del problema tengo session_start();

    Lo curioso es que esto solo me pasa con Firefox,con Internet Explorer no...:eek:
     
  16. Apolo

    Apolo Administrador Miembro del Staff Administrador CH

    Curioso. ¿Podrías citar la página en donde aparece el error?
     
  17. davidsongo

    davidsongo Nuevo usuario

    Hola, tengo un problema similar. Tengo una página desde la cual se inicia la sesión tras validar el usuario; las conexiones a la base de datos las hice con dreamweaver, por lo cual creo están en orden. Sin embargo, al cargar la página se muestra el formulario en el cual se introducen login y password, pero en la parte superior se muestra este mensaje:
    He estado buscando y no encuentro solución; lo que me ha dejado un tanto loco es el hecho de que el error, al parecer, está en la línea "0"... y el editor inicia en la línea 1... no sé si puedan ayudarme con esta situación.
     
  18. cyberneticos

    cyberneticos Usuario activo

    Probablemente sea la solución que publicaba Apolo en el primer post. Pero este error también se produce en algunas ocasiones cuando una cabecera ya ha sido enviado por otro lado (como puede ser en un include, etc.)

    Sería fantástico si publicas el código de las 2-3 primeras lineas para que te podamos ayudar.

    No olvides eliminar datos sensibles del código :)
     
  19. jbravo

    jbravo Usuario activo

    Hola David,

    En la primera línea del archivo C:\wamp\www\prueba\index.php tienes uno varios caracteres antes de iniciar el <?, verifica que no tengas espacios en blanco o algún otro tipo de caracter.

    Si tienes acceso al php.ini (y esto lo podemos añadir al listado de soluciones que puso Apolo) pon el output_buffering=On, también puedes hacerlo en tiempo de ejecución si no ahy restricciones por parte del proveedor.

    Cuando se va a enviar información en el encabezado de la respuesta HTTP es necesario que no se haya generado contenido a esa respuesta anteriormente.

    session_start es una de las muchas funciones que necesita enviar información en el encabezado de la respuesta HTTP y si imprimes cualquier tipo de contenido (así sea un sólo caracter) pues entonces no podrás enviar información en el encabezado de la respuesta en HTTP. A menos de que actives un espacio que almacenará la información del cuerpo del contenido antes de escribirlo en la respuesta. Y eso es lo que hace exactamente output_buffering=On.

    Saludos,
     
  20. davidsongo

    davidsongo Nuevo usuario

    Solución!!!

    Ya dí con el error... les cuento; estoy utilizando Dreamweaver y por ende el código se genera de manera automática, pero me causó curiosidad que en la primera línea, después de entrar a php en la primera línea había una expresión: virtual('../../../conections/miconexion.php'); pues bién, se supone que esta línea estaba llamando el archivo en el que se configuró la conexión con MySQL. La solución es que esa expresión no es la correcta, la reemplacé por require_once('../../../conections/miconexion.php') y listo!

    Cabe notar que este error, al consultarlo en internet, no aparecía tal cual me fue informado, pues el error aparecía en la línea '0'. Me atrevo a decir que cuando se utiliza dreamweaver para emplear datos dinámicos y este error aparece, siempre es a causa de que no se ha invocado al archivo que contiene los datos de la conexión con la BD a través de require_once() ó require().

    Muchas gracias.

    PD: adjunto el código fuente de la página de redirección que causó mi dolor de cabeza, ya corregido y funcionando.
     
  21. 2ark0

    2ark0 Nuevo usuario

    Solución que a mi me funcionó

    Mi problema consistia en que cuando me traía un proyecto que en Hostgator funcionaba al 100, en mi local me daba el error tan mencionado. La solución fue modificar el archivo php.ini y cambiar el parámetro:

    output_buffering = On

    Ya que yo lo tenía en Off. Saludos
     


Alojamiento web, Hosting Reseller, Servidores Dedicados - All in Hosting


    
    
    
    
Blog · Sitios amigos: GuiaHosting · Unidominios · Interalta ·