Les cookies magiques...

Résolu
alexflex25 Messages postés 106 Date d'inscription vendredi 29 septembre 2006 Statut Membre Dernière intervention 6 mars 2012 - 11 oct. 2009 à 12:24
Bul3 Messages postés 4933 Date d'inscription samedi 1 juillet 2006 Statut Membre Dernière intervention 2 février 2015 - 16 oct. 2009 à 09:00
Bonjour,
Encore une fois j'ai besoin de votre expérience...

J'ai réalisé une "class" javascript permettant de faire du drag n drop (que souhaite partager ici par la suite...). Mon problème concerne la sauvegarde de la position de chaque élément "Dragable"

L'algorithme établi est le suivant:
- Lorsque la position de mes éléments changent
- Je sauvegarde toutes les informations dont j'ai besoin dans un cookie.

Voici le résultat.

- Je bouge mes éléments...
- Les positions sont bien sauvegardés dans le cookie.
- J'actualise ma page.
- Les éléments conserve bien leurs positions
- COOL!!!
MAIS
- Je ferme le navigateur
- Je retourne sur ma page
- Les éléments se réorganise bien mais pas dans le dernier état. (celui que j'avais quand j'ai fermé le navigateur. Sachant qu'avant de fermer le navigateur les informations du cookie sont correctes)

Voici mes conclusions, les informations du cookie change entre le moment ou je ferme le navigateur et le moment ou je retourne dessus.(D'ou le nom du sujet "cookie magique")

Je ne vois pas d'où vient le problème...

Je ne pense pas que mon code soit faut puisque tout fonctionne bien lorsque je recharge ma page...

Merci de votre aide.

17 réponses

alexflex25 Messages postés 106 Date d'inscription vendredi 29 septembre 2006 Statut Membre Dernière intervention 6 mars 2012
15 oct. 2009 à 07:52
Re bonjour,

J'ai enfin trouvé cette fois-ci j'ai bien testé ma solution.

Pour résoudre le problème il a fallu que créé un nouveau profil Firefox. (cmd firefox -p)
Et en utilisant ce nouveau profile firefox je n'ai plus aucun problème de conservation de cookie.

J'ai donc eu raison de m'apitoyer sur les cookies de firefox!!!
3
Bul3 Messages postés 4933 Date d'inscription samedi 1 juillet 2006 Statut Membre Dernière intervention 2 février 2015 16
11 oct. 2009 à 13:58
Bonjour,

>>les informations du cookie change entre le moment
>>ou je ferme le navigateur et le moment ou je
>>retourne dessus.
euh...
je ne dirais pas que c'est tout à fait le
contraire , mais pas loin !
un cookie permet de mémoriser ce qu'on veut
et de retrouver ces informations lors d'une
connexion ultérieure ( sauf si l'internaute
supprime ces cookies ! )

si le cookie change, c'est qu'il est modifié !
aucun mystère.

exemple d'utilisation ? c'est ici


Cordialement [mon Site] [M'écrire] Bul
0
alexflex25 Messages postés 106 Date d'inscription vendredi 29 septembre 2006 Statut Membre Dernière intervention 6 mars 2012
11 oct. 2009 à 15:00
Je suis tout à fais d'accord avec toi!

Est ce que sa ne pourrait pas être un problème de cache?

(remarque sans réel fondement)

Mais je ne comprend pas pourquoi mon script fonctionne lorsque je recharge ma page et pas quand je quitte le navigateur.
0
Bul3 Messages postés 4933 Date d'inscription samedi 1 juillet 2006 Statut Membre Dernière intervention 2 février 2015 16
11 oct. 2009 à 15:14
le cache ? à priori non.
>>je ne comprend pas pourquoi mon script fonctionne lorsque
>>je recharge ma page et pas quand je quitte le navigateur
moi non plus !
mais essayez mon exemple, par exemple,
il fonctionne dans les 2 cas.
vous devez faire un erreur (?)
je vous dirais bien à la ligne 685,
mais je n'en suis pas absolument certain
navré, j'ai cassé ma hier soir, vous
n'avez pas de bol ( de cidre ou autres ),
je ne parviens plus à deviner
quoi que ce soit ( désolé )
mais je vous en prie ! si vous comprenez
le 2ème degré de ce message, ne nous mettez pas
ces 685 lignes... voire plus ! ça décourage !!!
faites l'extrait du nécessaire. tout le
nécessaire, mais rien que le nécessaire.
mettre en forme sa question c'est d'ailleurs
très souvent résoudre... seul
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
alexflex25 Messages postés 106 Date d'inscription vendredi 29 septembre 2006 Statut Membre Dernière intervention 6 mars 2012
11 oct. 2009 à 15:43
Comme je l'ai dit précédemment je sauvegarde dans un cookie toutes les infos dont j'ai besoin de la façon suivante: A chaque fois que la position de mes éléments changes
	
savePositionDragableElements: function(){
var name = 'asterisk';
var value = '';
var expires = '365';
var path = '/';
var domain = 'asterisk.flex';
var secure =''
var i=0;

var menuName = this.listeElement[i][3].getAttribute('list');

for(i=0;i<this.listeElement.length;i++){
value += menuName + '_' + i + '_0=' + this.listeElement[i][0] + ';';
value += menuName + '_' + i + '_1=' +this.listeElement[i][1] + ';';
value += menuName + '_' + i + '_2=' +this.listeElement[i][2] + ';';
value += menuName + '_' + i + '_3=' +this.listeElement[i][3].id + ';';
}
Set_Cookie( name, value, expires, path, domain, secure );
},


Voici la fonction Set_Cookie ... qui est appelé à la fin.

function Set_Cookie( name, value, expires, path, domain, secure ){
var today = new Date();
today.setTime( today.getTime() );

if ( expires ){
expires = expires * 1000 * 60 * 60 * 24;
}
var expires_date = new Date( today.getTime() + (expires) );
document.cookie = name + "=" +escape( value ) +
( ( expires ) ? ";expires=" + expires_date.toGMTString() : "" ) +
( ( path ) ? ";path=" + path : "" ) +
( ( domain ) ? ";domain=" + domain : "" ) +
( ( secure ) ? ";secure" : "" );
}



Puis, quand je retourne sur cette page j'appel la fonction suivante qui se charge de remplir avec les données du cookie mon attribut "this.listeElement" qui contient la liste et la position de chaque élément

	
loadPositionDragableElements:function(){
//Je récupère mon cookie
var infoCookie = getCookieInfo('asterisk');

var reg1=new RegExp(";", "g");
var reg2=new RegExp("=", "g");
var reg3=new RegExp("_", "g");
//je sépare toutes les variables pour les mettre dans un tableau
var listVariables=infoCookie.split(reg1);
var i = 0;
var j = 0;
//Je parcour cette liste de variable
for (i=0; i<listVariables.length; i++) {
//Je sépare le nom de la variable de sa valeur
var variables = listVariables[i].split(reg2);
var nomVariable = '';
//Puis je reconstruis mon tableau en fonction des noms des variables
if( variables[0].match(reg3) ){
nomVariable = variables[0].split(reg3);
if( nomVariable[2] == '3' ){
this.listeElement[nomVariable[1]][nomVariable[2]] = null;
this.listeElement[nomVariable[1]][nomVariable[2]] = $(variables[1]);
}else{
this.listeElement[nomVariable[1]][nomVariable[2]] = 0;
this.listeElement[nomVariable[1]][nomVariable[2]] = parseInt(variables[1]);
}
}
}
},


Voici au cas ou ma fonction de récupération de cookie... Mais je ne pense pas qu'elle pose problème...

function getCookieInfo(dataName){
var cookieLen = dataName.length;
var cookieData = document.cookie;
var allcookieLen = cookieData.length;

var i = 0;
var cookieEnd;

while(i < allcookieLen){
var j = i + cookieLen;
if (cookieData.substring(i,j) == dataName){
cookieEnd = cookieData.indexOf(";", j);
if (cookieEnd == -1){
cookieEnd = cookieData.length;
}
return unescape(cookieData.substring(j+1, cookieEnd))
}
i++;
}
return "Echec : cookie non cree ?";
}



(En même temps y'a rien qui me semble poser problème.
Mais ça ne fonctionne pas, donc y'a forcement une raison.
A mon avis le problème doit se trouver entre la chaise et le clavier...)
0
Bul3 Messages postés 4933 Date d'inscription samedi 1 juillet 2006 Statut Membre Dernière intervention 2 février 2015 16
11 oct. 2009 à 15:55
vous utilisez les cookies comme de
nombreux exemples montrent en compliquant
... bien inutilement.
un cookie c'est unique pour un visiteur,
pour un site, c'est une banale chaîne
de caractères, rien d'autres.
pourquoi donc gérer "n" ajouts, modifs...
dans le cookies, utiliser des expression
régulières...
pour tester, il faudrait mettre des alert
un peu partout : je vous laisse le faire.

mais, perso, bêtement, dans un cookie
le stocke ce que je veux récupérer !
regarder mon exemple
s'il y a plusieurs valeurs, bien entendu,
un petit split sur un séparateur quelconque,
rien d'autre n'est nécessaire
0
alexflex25 Messages postés 106 Date d'inscription vendredi 29 septembre 2006 Statut Membre Dernière intervention 6 mars 2012
11 oct. 2009 à 17:11
je viens de modifier mes 2 méthodes:
savepositiondragableelements
loadpositiondragableelements

Pour sauvegarder et charger les positions de mes éléments dans un serveur mysql.
Tout fonctionne parfaitement... (mais c'est ce que je veux faire...)

Je pense qu'il doit avoir une subtilité des cookies que je n'est pas comprise.
Peut-être faudrait il détruire le cookie avant de le recréer.
Peut-être qu'il faut un temps minimum pour écrire le cookie chez le client...
Je ne vois vraiment pas...

Aurais-tu une piste à me faire suivre?

Merci beaucoup dans tous les cas.
0
Bul3 Messages postés 4933 Date d'inscription samedi 1 juillet 2006 Statut Membre Dernière intervention 2 février 2015 16
12 oct. 2009 à 09:44
ni destruction, ne temps minimum
>>Je pense qu'il doit avoir une subtilité des
>>cookies que je n'est pas comprise.
plutôt dans la gestion de la chaîne de caractères
je n'ai pas décortiqué !
0
Bul3 Messages postés 4933 Date d'inscription samedi 1 juillet 2006 Statut Membre Dernière intervention 2 février 2015 16
12 oct. 2009 à 10:10
par exemple soit à mémoriser 2 valeurs, v1 et v2 :
document.cookie = v1+"_"+v2+
                  ";expires=" + d.toGMTString() + ";" ;
et pour relire :
var trv=document.cookie.split("_");
v1=trv[0];
v2=trv{1];
0
alexflex25 Messages postés 106 Date d'inscription vendredi 29 septembre 2006 Statut Membre Dernière intervention 6 mars 2012
12 oct. 2009 à 17:08
Une fois de plus je suis tout à fais d'accord avec toi.

Voici le résultat d'un nouveau test:

1 - Je "drag" mes éléments dans la page par exemple dans l'ordre (e1,e4,e3,e2)
2 - Je regarde le cookie via firefox (Outils -> Options -> Vie privée -> Afficher les cookies) j'ai bien l'ordre (e1,e4,e3,e2)
3 - Je recharge la page (l'ordre est conservé)
4 - Je regarde le cookie via firefox ... j'ai bien l'ordre (e1,e4,e3,e2)
5 - Je ferme le navigateur
6 - J'ouvre le navigateur (sans aller sur mon site)
7 - Je regarde le cookie je n'ai pas le même ordre

Je n'ai pas réussi à déterminer si l'ordre que je retrouve après la réouverture de mon navigateur est un état antécédent ou non.

Ce qui m'étonne encore plus c'est qu'en stockant les informations dans "mysql" au lieu d'un "coockie" tout fonctionne bien?


Si cela peut aider.
0
Bul3 Messages postés 4933 Date d'inscription samedi 1 juillet 2006 Statut Membre Dernière intervention 2 février 2015 16
13 oct. 2009 à 10:02
j'allais dire... impossible
ce qu'on met dans un coookie change... si on le modifie
vous devez écraser le cookie à un moment donné,
"mal" réexploiter les données, "mal" les mémoriser....
faites un alert(document.cookie) au onbeforeunload,
au onload...
0
alexflex25 Messages postés 106 Date d'inscription vendredi 29 septembre 2006 Statut Membre Dernière intervention 6 mars 2012
14 oct. 2009 à 21:23
Bonsoir,

J'ai enfin trouvé la solution...
Par contre c'est assez compliqué à expliquer, mais je vais faire de mon mieux.

Pour résumer il y avait deux erreur JS à un moment donné dans mon code qui n'était pas remonté dans 'la console d'erreur' de Firefox ni dans 'firebug' puisque le script résultait d'une requête Ajax...
(le script était donc stoppé dans son exécution)

J'ai découvert ces erreurs en isolant mon code dans une page HTML toute simple.

Merci pour tes conseils Bul3 qui, faute de m'avoir mis sur la piste, m'ont permis de chercher une solution plutôt que de m'apitoyer sur les 'cookies' (Complètement ridicule quand j'y repense)

Encore merci.
0
alexflex25 Messages postés 106 Date d'inscription vendredi 29 septembre 2006 Statut Membre Dernière intervention 6 mars 2012
14 oct. 2009 à 22:16
!!ATTENTION!!

J'ai corrigé des erreurs au dessus mais ça n'a pas corrigé le problème.

(Dégouté...)

Je suis désolé de dire cela mais je pense vraiment que Firefox à un problème avec les "cookies"

...
0
Bul3 Messages postés 4933 Date d'inscription samedi 1 juillet 2006 Statut Membre Dernière intervention 2 février 2015 16
15 oct. 2009 à 07:57
>>pense vraiment que Firefox à un
>>problème avec les "cookies"
absolument pas. aucun doute,
comme avec tous les navigateurs, les
cookies fonctionnent sans problème.
vous avez essayé avec d'autres navigateurs ?
>>puisque le script résultait d'une requête Ajax...
c'est à dire que le javascript
est retourné par ajax ?? si c'est oui,
la voila l'erreur : le javascript n'est
pas interprété dans ce cas ! c'est à
vous de le faire manuellement ( eval
ou autres ).
( [u]le mieux étant de mettre ce javascript
dans la page appelante !/u )
0
Bul3 Messages postés 4933 Date d'inscription samedi 1 juillet 2006 Statut Membre Dernière intervention 2 février 2015 16
15 oct. 2009 à 07:59
ah ? j'ai répondu sans lire le dernier message !?!
cmd firefox -p ? lancé depuis la ligne de
commande window ?
0
alexflex25 Messages postés 106 Date d'inscription vendredi 29 septembre 2006 Statut Membre Dernière intervention 6 mars 2012
15 oct. 2009 à 18:26
Salut,
j'ai exécuté depuis le menu "démarrer" de windows.
"Démarrer" -> "Exécuter" -> "firefox -p".

A partir de là, firefox te propose de créer un nouveau profil. (Par défaut il y a le profil "default"). J'ai ajouté un profil "alexandre" à firefox. Maintenant au démarrage de firefox il me propose de choisir un profil ("default" ou "alexandre"). Quand je choisi le profil "alexandre" mon script fonctionne. mais si je choisi le profil "default" mon script ne fonctionne pas...

Note: j'ai récemment mis à jour ma version de firefox (3.0.14) à la version (3.5.3). Apparemment le bug vient de cette mise à jour, puisque la méthode de stockage des cookies change entre ces deux versions.
- Dans un fichier .txt pour la version (3.0.14)
- Dans un fichier .sqlite pour la version (3.5.3)

Il y aurait un problème de compatibilité des profils entre la branche de développement 3.0 et 3.5 de firefox...

Voila
0
Bul3 Messages postés 4933 Date d'inscription samedi 1 juillet 2006 Statut Membre Dernière intervention 2 février 2015 16
16 oct. 2009 à 09:00
alors là, je ne sais pas.
je n'ai que la dernière version (3.5.3)
0
Rejoignez-nous