Problème de duplication de variables session

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 : Problème de duplication de variables session

par starkeus » 11 mai 2006, 13:12

Donnes nous ton code entier... on pourra tester de notre côté ;)
Si trop gros, fais un zip :)

par Invité » 11 mai 2006, 12:45

>- cet "ajout automatique" ne s'est pas fait en passant par la fonction d'ajout (j'ai mis un echo pour vérifier l'utilisation de cette fonction) !!!

de quelle façon fais tu ton test ?
pour être sûr tu peux écrire dans un fichier qui gardera en mémoire chaque passage dans ton code.

est ce que le problème persiste si avant de rester 15 sec inactif tu te place sur une page qui ne contient pas le code d'ajout ?

par pitbull » 11 mai 2006, 07:02

Salut Bioas

Merci de ton aide.

En fait le pb n'est pas lié à mon environnement car j'ai également le souci sur le serveur chez mon hébergeur.

J'ai effectivement pensé utiliser les cookies plutôt que les sessions, mais ça n'aurait été qu'une solution de contournement et ne m'aurait pas expliqué l'origine du soucis...

J'ai d'ailleurs toujours pas trouvé, donc pour l'instant je me suis créé une petite fonction qui contrôle les éventuels doublons d'article dans le panier en session et qui les supprime.

Ca règle le pb fonctionnellement, par contre l'anomalie technique subsiste, ce qui est vraiment génant :/

par Bioas » 10 mai 2006, 23:27

Je n'ai aucune idée de ce qui peut ce produire dans ton code moi aussi. Je n'ai aps vraiment le temps d'étudié le cas non plus mais tu pourais essaillé de testé ton code sur une autre machine avec des configuration semblable. Test en fonction du temps mais aussi si cela ce reproduit plusieur fois. Tu pourra alors savoir si l'erreur se reproduit a chaque fois et si c'est le serveur qui est en cause. Après tout sa si le problème persiste, je te conseille de faire une classe ou de fonction pour gèré tout tes item plus facilement. Je te donne un petit apercu.

Tu pourais passé la liste des item par un paramètre "GET", il se retrouve à la fin de l'adresse, par un cookie ou encore les session si elles ne cause pas de problèmes. Tes item doivent être dans une bdd alors ils ont des identifiant. Que se soit un nom un numéro ou nimporte quoi d'autre tu pourais te servir ce celui-ci. Regarde bien :

Code : Tout sélectionner

// La variable session contien le panier depuis que l'utilisateur navigue... $_SESSION['BASKET']=$_SESSION['BASKET']; // Sa valeur bien sur.... // Mais elle pourais ici être ... $_SESSION['BASKET']="%A2BC3:2%AC456:1%B37DA:0"; // Donc tu as ici l'item A2BC3 deux fois, AC456 une fois et B37DA aucune fois.
Ensuite il te reste a gèré sa. La sa devient plus compliqué.. et je n'ai aps beaucoup de temps, alors je t'explique rapidement. Surement que quelqu'un pourais te donné de l'aide ici.

Tu déclare une ou des variables globale, généralement des tableau. Disont un tableau. Pour chaque case dans celui ci tu retrouve un autre tabvleau avec les information du panier pour les traité dans ta page. Tu remplis ce tableau avec la variable de session a l'aide d'une fonction qui sais le faire.
Tu doit utilisé la commande Explode() pour séparé la chaine en plusieur partie avec les symbole que tu veut. Donc la fonction traite la variable session et affecte ceci au tableau. voila un petit début :

Code : Tout sélectionner

Globa $Basket; Function fillBasket($String) { // Le code ici... Return $Resulta; } $Basket=fillBasket($_SESSION['BASKET']);
Après tu parcour ton tableau pour affiché tes item un a la fois avec les information dans la bdd comme leur nom. Pour en ajouté tu fait une ou plusieur fonction qui font le travail en parcourant ton tableau.

Tout ce que tu as a faire pour que tout fonctionne est de définir ta variable de session avec une autre fonction qui converti ton tableau en chaine de caractère avec la commande Implode(). Cette commande fait l'inverse d'explode.

Code : Tout sélectionner

Function setSession($Tableau) { // le code et finalement $_SESSION['BASKET']=$String; } // Mais moi j'aime mieux comme sa : Function setSession($Tableau) { //Le code qui se charge de convertir le tableau en chaine... Return $Resultat; // Ou string... } $_SESSION['BASKET']=setSession($Basket);
Et la classe est la meilleur option car elle contien toutes ces méthode et tu peut l'utilisé comme ceci :

Code : Tout sélectionner

$BasketClass=new Basket; $BasketClass->Fill($_SESSION['BASKET']); // Ta page... Tes fonction.. requète.... // Petit exemple $Basket->increaseItem("A2BC3"); // Et à la fin : $BasketClass->setSession("$_SESSION['BASKET']"); // Regarde bien la fin de ce setSession : Function setSession($VarSession) { Eval($VarSession."=".$String.";"); // Ici on prend ta variable de session et on met la chainne qui contien tout le panier pour la prochaine page.. }
Les classe sont parfois compliqué car il y as énormément de façon de les créer pour arrivé a faire ce que l'ont veut. Alors si tu ne veut pas les apprendre et expérimenté contente toi de Fonction simple que tu fait dans un fichier a inclure dans ta page ou ton script....

J'espère avoir pu t'aidé

par Cyrano » 10 mai 2006, 18:57

On ne se pose sans doute pas la bonne question... si on trouve la bonne question, trouver la réponse sera infiniment plus facile... mais j'avoue que je vois pas trop dans quel sens aborder le problème. Tu connais ton code mieux que moi, tu sauras peut-être mieux voir.

par pitbull » 10 mai 2006, 17:11

C'est que je me suis dit initialement, mais le délai d'inactivité m'intrigue : s'il y avait un bug de code, la duplication se ferait dès le premier clic, et non pas uniquement après 15s d'inactivité... non ? :-k

par Cyrano » 10 mai 2006, 17:07

l'incrémentation a forcément lieu quelque part dans le code, la génération spontanée n'existe pas en informatique non plus. DOnc le problème, c'est de débusquer le bout de code qui fait ça... là, ça risque d'être soit très rapide avec un coup de bol soit une galère sans nom de quelques jours...

par pitbull » 10 mai 2006, 16:57

Tout à fait...

Il y a deux éléments :

- inactivité d'une quinzaine de secondes
- duplication session en mémoire non initiée par une fonction

Qu'est-ce qui pourrait faire que le serveur d'application duplique une variable session au bout d'un laps de temps d'inactivité ? Peut-être ai-je mal codé quelque chose quelque part ??? :roll:

par Cyrano » 10 mai 2006, 16:47

Si l'ajout ne passe pas par la fonction dédiée à cet effet, on a un problème relevant de la cinquième dimension là... :-k

par pitbull » 10 mai 2006, 16:45

Bonjour,

J'ai utilisé ton exemple de boutique en ligne, mais malheureusement ça ne résout pas le problème... :(

J'ai toujours le même comportement :

- lors de l'ajout d'un item au panier, tout se passe bien
- si je navigue, le panier m'affiche toujours le bon nombre d'articles etc
- lorsque j'arrête de naviguer (à partir de 15s d'inactivité) mon item est à nouveau ajouté au panier
- cet "ajout automatique" ne s'est pas fait en passant par la fonction d'ajout (j'ai mis un echo pour vérifier l'utilisation de cette fonction) !!!
- il semble qu'il y ait donc une sorte de duplication des variables mises en session à partir d'une quinzaine de secondes d'incativité...
- j'ai ce comportement en développement (local), et sur le serveur de mon hébergeur

Je n'ai absolument aucune idée de l'origine de ce bug, je suis perdu...

Merci d'avance de ton aide !!!

par Cyrano » 05 mai 2006, 19:28

Cette ligne est en effet curieuse, tu veux faire quoi au juste ?
$item = 'item['.$_boutique_nb_articles.']';
:?:

par pitbull » 05 mai 2006, 19:13

Sans doute ;)
Je pensais peut-être aux crochets dans la déclaration du tableau "item" en session...

par Cyrano » 05 mai 2006, 19:00

Disons que comme ça ne se produit pas dans mon code, il y a certainement quelque chose dans le tien qui cloche... donc la compariaison entre les deux te permettra peut-être de relever une coquille quelque part ?

par pitbull » 05 mai 2006, 18:55

Merci de ta réponse Cyrano, je regarderai ton exemple la semaine prochaine.

Par contre, je l'ai lu rapidement et je n'ai rien vu expliquant mon problème... qui est qu'une variable mise en session est dupliquée au bout d'un certain temps d'inactivité :/

par Cyrano » 05 mai 2006, 18:23

Bon allez, je le ressors : une source d'inspiration