Un petit probleme avec un cookie

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Un petit probleme avec un cookie

par zeus » 01 août 2006, 10:42

Tu m'aurais écouté, ca ne te serais pas arrivé ;)

Vu ton code, ton serveur doit charger automatiquement le contenu des GET/POST dans les variables correspondantes ($_GET['langue'] dans $langue)

Le problème de refresh vient du fait que tu doit avoir une collision entre $_GET['langue'] et $_COOKIE['langue']

Essaye de changer le nom du cookie et le nom de la variable que tu utilises. je te conseillais $langue_site par exemple. ;)

La solution du rafraichissement est très mauvaise car c'est un aller-retour sur le serveur donc :
- temps d'attente
- utilisation bande passante
- utilisation ressource serveur

par Kwansu » 01 août 2006, 10:36

Merci pour ta réponse, ça fonctionne en effet :D

j'ai juste rajouté un rafraichissement car avec ta proposition, la page affichait la langue demandé au bout de la seconde demande.

Voila ce que ça donne:
// GESTION DU CHOIX DE LA LANGUE PAR VISITEUR
	 
    //Si le visiteur demande un changement de langue 
    if ($_GET['langue'])
	{ 
		$langue = $_GET['langue']; 
         
        $fin_cookie = 3600*24; 
        setcookie("langue",$langue,time()+$fin_cookie); // on enregistre un cookie 
		echo "<meta HTTP-EQUIV=\"refresh\" content=0;URL=\"index.php\">"; // on rafraichi la page pour prendre en compte le changement de langue
    }
	elseif($_COOKIE['langue'])
	{ //Si la langue choisie existe dans le cookie 
        $langue = $_COOKIE['langue']; 
    }
	else
	{ //Aucun choix, aucun cookie 
        $langue = 'fr'; 
    } 
?>

par zeus » 01 août 2006, 10:20

Il me semble que le cookie est réellement modifé lors de la fin du chargement de la page sur le poste client.

Dans ton script, tu modifies la valeur du cokie et juste après, tu utilises le contenu du cookie. Si ma théorie est bonne, tu doit avoir le contenu du cookie sans la modification.

Ce que je te conseille, c'est de ne pas te fier au contenu du cookie.

Si le visiteur demande un changement de langue, conserve cette langue
Si il y a un cookie, conserve la valeur du cookie
Sinon prend la valeur par défaut
<?php
    //Si le visiteur demande un changement de langue
    if ($_GET['langue']) {
    	$langue_site = $_GET['langue'];
    	
        $fin_cookie = 3600*24;
        setcookie("langue",$langue_site,time()+$fin_cookie); // on enregistre un cookie
    } elseif($_COOKIE['langue']) { //Si la langue choisie existe dans le cookie
    	$langue_site = $_COOKIE['langue'];
    } else { //Aucun choix, aucun cookie
    	$langue_site = 'fr';
    }
?>
PS : utilise $_GET pour récupérer les valeurs passée en parametre et evite d'utiliser les noms des GET/POST/COOKIE comme nom de variable ;)

Un petit probleme avec un cookie

par Kwansu » 01 août 2006, 09:57

Salut tout le monde,

Je suis en train de passer un site en multilingue. Je récupère le choix de la langue et l'enregistre dans un cookie.

La langue par défaut est le français (si pas de langue spécifiée) et le changement de langue ramène sur la page d'accueil du site.

Lorsque j'arrive sur le site il est en français, jusque la tout est normal. Lorsque je veux le basculer en Anglais, il bascule et le cookie est créé (j'ai été vérifier).

C'est après que survient mon probleme. J'ai lu que lorsq'un cookie devait etre créé, si un cookie portant le même non existait, il était écraser. C'est ce que je veux puisque on peux vouloir rebasculer en français.

Toutefois, le site reste en Anglais. Voila mon code qui se trouve avant le HTML.
<?php

// GESTION DU CHOIX DE LA LANGUE PAR VISITEUR
	if ($langue)
	{
		$fin_cookie = 3600*24;
		setcookie("langue",$langue,time()+$fin_cookie); // on enregistre un cookie
	}

// SELECTION ET MEMORISATION DE LA LANGUE
	if (!$_COOKIE["langue"]) 
	{ 
		$langue = "fr"; // langue par défaut
	} 
	else
	{ 
		$langue = $_COOKIE["langue"];
	} 
?>
Plus loin dans la page se trouve les liens pour basculer d'une langue à l'autre:

Code : Tout sélectionner

<table width="80px"> <tr> <td> <a href="index.php?langue=fr"><img src="trame_de_fond/drapeau_fr.jpg" border="0" alt="Français" /></a> </td> <td> <a href="index.php?langue=en"><img src="trame_de_fond/drapeau_en.jpg" border="0" alt="English" /></a> </td> </tr> </table>
Pourquoi le cookie n'est pas écraser lorsque je redemande ça création?