Foros del Web » Programando para Internet » PHP »

Cookiesss

Estas en el tema de Cookiesss en el foro de PHP en Foros del Web. Hola, estoy trabajando con cookies para controlar el cambio de idioma en la web y me pasa algo raro. En el directorio raíz me funciona ...
  #1 (permalink)  
Antiguo 18/07/2010, 07:35
Avatar de humanista  
Fecha de Ingreso: abril-2005
Mensajes: 878
Antigüedad: 19 años
Puntos: 15
Cookiesss

Hola, estoy trabajando con cookies para controlar el cambio de idioma en la web y me pasa algo raro. En el directorio raíz me funciona perfectamente el cambio de idioma pero con los mismos parámetros en cualquier carpeta no me coge el setcookie.

El tema es que cambio el idioma pinchando en la opción español/english que manda por GET es/en y crea la cookie. Como digo, en el raís me va bien y me cambia la cookie pero misteriosamente en cualquier otro directorio no me cambia la cookie (aunque sí el idioma pq va con GET). Claro, aunque me haya cambiado el idioma en ese directorio, la cookie sigue con el idioma que trae del directorio raíz por lo que cuando voy a éste me vuelve a cambiar el idioma.

Código PHP:
<?
$getlanguage
=$_GET['language'];

if(
$getlanguage == "en")
{
    
setcookie("language""en"time()+60*60*24*365);
    
    if (
$path=="")
    {
        require (
"language/english.php");
    }
    
    if (
$path=="../")
    {
        require (
"../language/english.php");
    }
}

if(
$getlanguage == "es")
{
    
setcookie("language""es"time()+60*60*24*365);
    
    if (
$path=="")
    {
        require (
"language/spanish.php");
    }
    
    if (
$path=="../")
    {    
        require (
"../language/spanish.php");
    }
}


if(
$getlanguage == "")
{

if(
$_COOKIE["language"] == "es")
{
    if (
$path=="")
    {
        require (
"language/spanish.php");
    }
    
    if (
$path=="../")
    {    
        require (
"../language/spanish.php");
    }
}

if (
$_COOKIE["language"] == "en")
{
    if (
$path=="")
    {
        require (
"language/english.php");
    }
    
    if (
$path=="../")
    {
        require (
"../language/english.php");
    }
}

if (
$_COOKIE["language"] == "")
{
    
$language $_SERVER['HTTP_ACCEPT_LANGUAGE'];
    
$language substr($language02);
    
    if (
$language=="es")
    {
        
setcookie("language""es"time()+60*60*24*365);
        
        if (
$path=="")
        {
            require (
"language/spanish.php");
        }
        
        if (
$path=="../")
        {    
            require (
"../language/spanish.php");
        }        
    }
    else
    {
        
setcookie("language""en"time()+60*60*24*365);
        
        if (
$path=="")
        {
            require (
"language/english.php");
        }
        
        if (
$path=="../")
        {    
            require (
"../language/english.php");
        }        
    }
}

}
  #2 (permalink)  
Antiguo 18/07/2010, 10:34
Avatar de AhmedRugama  
Fecha de Ingreso: diciembre-2008
Ubicación: Nicaragua
Mensajes: 160
Antigüedad: 15 años, 4 meses
Puntos: 6
Respuesta: Cookiesss

Hola supongo que en las otras paginas el code que pones es distinto no?

if($_COOKIE["languaje"] == "en"){
...

ya que en las otras páginas $_GET['language'] no existe
  #3 (permalink)  
Antiguo 18/07/2010, 12:29
Avatar de humanista  
Fecha de Ingreso: abril-2005
Mensajes: 878
Antigüedad: 19 años
Puntos: 15
Respuesta: Cookiesss

el código es siempre el mismo, el q he puesto arriba, salu2
  #4 (permalink)  
Antiguo 18/07/2010, 12:48
Avatar de AhmedRugama  
Fecha de Ingreso: diciembre-2008
Ubicación: Nicaragua
Mensajes: 160
Antigüedad: 15 años, 4 meses
Puntos: 6
Respuesta: Cookiesss

Por eso, el codigo deveria ser:

if($getlanguage == "en"){
setcookie("language", "en", time()+60*60*24*365);
}

if($getlanguage == "en" || $_COOKIE["language"] == "en"){
include "en.php";
}
  #5 (permalink)  
Antiguo 18/07/2010, 12:48
Avatar de AhmedRugama  
Fecha de Ingreso: diciembre-2008
Ubicación: Nicaragua
Mensajes: 160
Antigüedad: 15 años, 4 meses
Puntos: 6
Respuesta: Cookiesss

Porque estas creando el cookie pero si no existiera el GET deves de comprobar si ay un cookie, por eso no te sirve
  #6 (permalink)  
Antiguo 18/07/2010, 12:51
Avatar de humanista  
Fecha de Ingreso: abril-2005
Mensajes: 878
Antigüedad: 19 años
Puntos: 15
Respuesta: Cookiesss

Cita:
Iniciado por humanista Ver Mensaje
el código es siempre el mismo, el q he puesto arriba, salu2
el tema es muy curioso pq pruebo con dar un nombre diferente a la cookie en los directorios (no en el raíz) y me hace bien el setcookie. es como si sólo se pudiera cambiar la cookie en el raíz pero no sé pq.
  #7 (permalink)  
Antiguo 18/07/2010, 13:47
Avatar de humanista  
Fecha de Ingreso: abril-2005
Mensajes: 878
Antigüedad: 19 años
Puntos: 15
Respuesta: Cookiesss

no puedo hacerlo como dices pq la cookie no se carga en el momento, necesita refrescar la página
  #8 (permalink)  
Antiguo 18/07/2010, 14:05
Avatar de HackmanC  
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 3 meses
Puntos: 260
Sonrisa Respuesta: Cookiesss

Hola,

Posiblemente,

Necesitas utilizar el parámetro 'path' y 'domain' de la función setcookie(). Si llamas a setcookie() en el directorio / se aplica a todo el dominio, pero si la usas en /foo/ se aplica solamente a ese directorio. Como estás haciendo setcookie() en el raiz y en los sub-directorios está guardando cookies separadas para cada uno aunque tengan el mismo nombre.

Aunque no estoy seguro,
Saludos,
  #9 (permalink)  
Antiguo 18/07/2010, 16:58
Avatar de humanista  
Fecha de Ingreso: abril-2005
Mensajes: 878
Antigüedad: 19 años
Puntos: 15
Respuesta: Cookiesss

genial HackmanC!!!

funcionó, ese era el problema, el tema del path, lo solucioné poniendo tal sólo "/" como último parámetro con lo que la cookie está disponible en todo los directorios del documento, 1000 gracias:

Código PHP:
Ver original
  1. setcookie("language", "es", time()+60*60*24*365, "/");
gracias tb AhmedRugama por tu preocupación, ya hemos aprendido algo más

Etiquetas: Ninguno
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 18:39.