Problema con cookie y servidor
Buenas a todos
Más que una solución busco una explicación
Estoy desarrollando una web que usa cookies y me he encontrado con un problemilla.
Uso PHP para crear la cookie, si lo hago directamente usando
<code>setcookie("TestCookie", $value, time()+3600);</code>
Depende en que servidor funciona o no. Cuando no funciona me da este error :
Warning: Cannot modify header information - headers already sent by ....
Sin enbargo si cuando la creo mediante un formulario POST a un archivo php que crea la cookie si funciona en cualquier servidor.
Como ya digo lo que me gustaría es saber donde puede radicar el problema para plantearlo a la empresa que tiene el hosting del cliente.
A ver si me echais una mano
dagi3d
eso es porque has mandado texto a la salida del navegador antes de crear la cookie. a partir de ciertas versiones de php ya se indicaba la linea de código que provocaba el error. ten en cuenta que un simple salto de linea ya se considera texto...
gainza
Entoces depende de la versión de PHP que use el servidor?
No entiendo muy bien una cosa. El código que uso es el siguiente
<code><?
$estilo = $_COOKIE['cambio_idioma'];
if($estilo ==null){
if ($_SERVER['HTTP_ACCEPT_LANGUAGE'] != ''){
$idiomes = explode(",", $HTTP_ACCEPT_LANGUAGE);
for ($i=0; $i<count($idiomes); $i++){
if (!isset($idioma)){
if (substr($idiomes[$i], 0, 2) == "es"){$estilo = "es";}
if (substr($idiomes[$i], 0, 2) == "en"){$estilo = "en";}
if (substr($idiomes[$i], 0, 2) == "fr"){$estilo = "fr";}
}
}
setcookie('cambio_idioma', $estilo, time()+31536000);
}
}</code>
Hay bastantes líneas de código antes de crear la cookie. No puedo usar entoces este código?
happywebcoder
Como dice dagi3d, lo importante es que no envíes texto antes de las cabeceras que incluyen la cookie: vigila que antes del <? no haya ningún carácter (es fácil dejarse un espacio en blanco, un salto de línea...).
Si en el código del archivo que estás ejecutando incluyes otros archivos tendrás que comprobarlos también, no vaya a ser que alguno te esté jugando una mala pasada...
gainza
Gracias por vuestras respuestas
El problema era que el script lo llamaba mediante un include, y debía haber conflictos, tal y como me comentabais.
Al final lo he solucionado poniendo el script solo en el index creando la cookie y luego redirigiendo con header("Location: