2009-08-28 5 views
0

Pourquoi ne puis-je changer de cookie?Pourquoi mon cookie de localisation ne semble-t-il pas vouloir changer?

Si vous choisissez une langue que vous ne pouvez pas changer. Vous devez vider vos cookies si vous voulez changer de langue. Pourquoi donc?

if (isset($_GET['setLang']) && $_GET['setLang'] == 'en' 
|| isset($_COOKIE['setLang']) && $_COOKIE['setLang'] == 'en') { 
setcookie("setLang", 'en', time()+(3600*12)); //expires in 12 hours 
include('language/en/common.php'); 
} 


elseif (isset($_GET['setLang']) && $_GET['setLang'] == 'se' 
|| isset($_COOKIE['setLang']) && $_COOKIE['setLang'] == 'se') { 
setcookie("setLang", 'se', time()+(3600*12)); //expires in 12 hours 
include('language/se/common.php'); 
} 

else if (isset($_GET['setLang']) && $_GET['setLang'] == 'fr' 
|| isset($_COOKIE['setLang']) && $_COOKIE['setLang'] == 'fr') { 
setcookie("setLang", 'fr', time()+(3600*12)); //expires in 12 hours 
include('language/fr/common.php'); 
} 

// default language is english 
else { 
    include('language/en/common.php'); 
} 
+0

lecture cette logique mal mon cerveau :(. – DaveJohnston

+0

Mmmmm .. cookies. –

Répondre

3

Vous pouvez certainement changer les cookies. Vous ne pouvez pas changer de langue en utilisant la logique que vous avez parce que, comme vous l'avez écrit, un paramètre $_COOKIE remplace toujours un paramètre $_GET (à l'exception de $_GET, où $_GET sera vérifié en premier, donc maintenant vous devriez être en mesure de passer à en si vous avez commencé avec une autre langue). Vous devez d'abord faire toutes les vérifications contre $_GET, puis toutes les vérifications par rapport à $_COOKIE, si vous voulez pouvoir changer de langue.

+0

Ou mieux encore, pour rendre les choses plus claires, choisir l'un des deux endroits comme la « source de langage canonique » et ont Par exemple, faites de '$ _GET' la source canonique, donc vous avez un petit blurb de' include', et au-dessus si '$ _GET' n'est pas présent, remplace le cookie et place le '$ _GET' avec son contenu par défaut Au moins une liste de codes de langue autorisés et vali – dcousineau

2

La logique a également blessé mon cerveau.

$language = $_GET['setLang'] || $_COOKIE['setLang']) || 'en'; 
setcookie("setLang", $language, time()+(3600*12)); 
include('language/' . $language . '/common.php'); 

Vous obtiendrez le même résultat et corrigerez vos problèmes de cookies (non testés).

+0

S'il vous plaît ne faites pas cela. date contre cela, avant de faire confiance aveuglément à l'entrée de l'utilisateur et en utilisant cela dans un include. –

+0

(En fait, puisque le dernier terme est «en», «$ language» sera toujours «true».) – chaos

0

setcookie() définit un cookie pour être envoyé en même temps que le reste des en-têtes HTTP . Comme les autres en-têtes, les cookies doivent être envoyés avant toute sortie de votre script (il s'agit d'une restriction de protocole ). Cela nécessite que vous placer des appels à cette fonction avant toute sortie, y compris et étiquettes ainsi que tout espace.

http://in3.php.net/setcookie

Questions connexes