Ver Mensaje Individual
  #1 (permalink)  
Antiguo 05/12/2014, 10:35
Avatar de SirZoX
SirZoX
 
Fecha de Ingreso: mayo-2006
Ubicación: Valencia
Mensajes: 124
Antigüedad: 18 años
Puntos: 2
Problemas con cookies y su orden de ejecución

Hola a todos, hoy vengo con una peli de cookies.

Veamos, tengo el siguiente código nada más abrir el archivo, para que elimine la cookie de idioma que pueda existir previamente, y después capturo desde la url el valor de "L" y genero una nueva cookie con validez para la sesión actual y le asigno el valor que corresponda según el lenguaje en el que se haya hecho click. Esto está comprobado que al hacer click en cada uno de los idiomas, el navegador efectivamente elimina la anterior y genera una nueva con el valor correcto.
Código PHP:
    setcookie ('idioma','',time()-1);
    
    switch(
$_GET['l']) {
        case 
'es'setcookie('idioma','es'); break;
        case 
'en'setcookie('idioma','en'); break;
        case 
'it'setcookie('idioma','it'); break;
    } 
Inmediatamente después tengo éste código, que en principio será el que gestione, en función del idioma que haya almacenado en la cookie, los define que contienen los textos que se mostrarán luego.
Código PHP:
    switch ($_COOKIE['idioma'])  {
        case 
'es':
        case 
NULL;
        case 
'':
            
define ("langTitleTag","title en ES");
        break;
        
        
        case 
'en':
            
define ("langTitleTag","title en EN");
        break;
        
        
        case 
'it':
            
define ("langTitleTag","title en IT");
        break;    
    } 
Pues el problema que me encuentro, es que $_COOKIE['idioma'] nunca captura el valor de la cookie a la primera, sino a la segunda. Es decir, me cargo la cookie del navegador para empezar la prueba limpio. Entro a la página y por defecto debe mostrarme en castellano, OK, esto funciona. Pulso cualquiera de los dos otros idiomas y al recargar la página sigue en castellano, pulso de nuevo en cualquiera de los dos idiomas, y ahora el title sale el que había pulsado la primera vez... Y no tengo ni idea de por donde meterle mano porque he probado hasta a colocar el switch($_COOKIE[]) dentro del body... que total por probar... pero nada.

A ver si alguien me puede arrojar algo de luz con esto, que llevo demasiadas horas perdidas con esto, y me he planteado otras soluciones como capturar la IP y guardar temporalmente en una BBDD el idioma asociado a una IP, pero la coña es que si entran desde la oficina del cliente, todos con la misma IP... ya va a fallar el asunto.