J'ai un problème vraiment bizarre avec les variables de session PHP. Basé sur l'ID de session, il semble qu'il y aurait des variables doubles à l'intérieur de la même session, ce qui naturellement ne peut pas être possible.PHP: tableaux de variables de session outsync ou concurrentes dans la session
Le problème est que la variable de session 'quote' devrait rester la même lorsque le formulaire dans la page est soumis, ce qui recharge la page elle-même. La variable $ _SESSION ['quote'] n'est définie que si elle n'est pas définie, ce qui se passe dans les deux premiers rechargements comme cela peut être vu dans les logs ci-dessous.
Code de débogage:
echo "\n Current session id: ".session_id();
echo "\n _SESSION['quote']: ".$_SESSION['quote'];
$_SESSION['counter'] = isset($_SESSION['counter'])? $_SESSION['counter'] +1 : 0;
echo "\n _SESSION['counter']: ".$_SESSION['counter'];
Output when page is reloaded(form submitted):
Current session id: r5i15u4s9e20ud4j6jke8ln376;
$_SESSION['quote']: ;
$_SESSION['counter']: 0;
set _SESSION['quote']: 984;
Current session id: r5i15u4s9e20ud4j6jke8ln376;
$_SESSION['quote']: ;
$_SESSION['counter']: 0;
set _SESSION['quote']: 985;
Current session id: r5i15u4s9e20ud4j6jke8ln376;
$_SESSION['quote']: 985;
$_SESSION['counter']: 1;
Current session id: r5i15u4s9e20ud4j6jke8ln376;
$_SESSION['quote']: 985;
$_SESSION['counter']: 2;
Current session id: r5i15u4s9e20ud4j6jke8ln376;
$_SESSION['quote']: 984;
$_SESSION['counter']: 1;
Current session id: r5i15u4s9e20ud4j6jke8ln376;
$_SESSION['quote']: 985;
$_SESSION['counter']: 3;
Current session id: r5i15u4s9e20ud4j6jke8ln376;
$_SESSION['quote']: 984;
$_SESSION['counter']: 2;
Ce problème se produit avec Firefox et IE. Un conseil ou un conseil serait très apprécié. Merci d'avance.
--- EDIT --- Ajouté écho sérialisation ($ _ SESSION); comme proposé.
<?php session_start();
echo "\nSerialized data at begin of page: ";
echo serialize($_SESSION);
echo "\n Current session id: ".session_id();
echo "\n _SESSION['quote']: ".$_SESSION['quote'];
$_SESSION['counter'] = isset($_SESSION['counter'])? $_SESSION['counter'] +1 : 0;
echo "\n _SESSION['counter']: ".$_SESSION['counter'];
SORTIE:
Initial loading of page:
Serialized data at begin of page: a:0:{}
Current session id: vbbpohof2jo757eaj5jrp4dv02
$_SESSION['quote']:
$_SESSION['counter']: 0
...
Serialized data at end of page: a:1:{s:7:"counter";i:0;}
Page 1. reload by form submit:
Serialized data at begin of page: a:0:{}
Current session id: vbbpohof2jo757eaj5jrp4dv02
$_SESSION['quote']:
$_SESSION['counter']: 0
...
Serialized data at end of page: a:3:{s:7:"counter";i:0;s:8:"quote";i:1023;s:9:"quotedate";s:10:"2010-11-18";}
Page 2. reload by form submit:
Serialized data at begin of page: a:1:{s:7:"counter";i:0;}
Current session id: vbbpohof2jo757eaj5jrp4dv02
$_SESSION['quote']:
$_SESSION['counter']: 1
...
Serialized data at end of page: a:3:{s:7:"counter";i:1;s:8:"quote";i:1024;s:9:"quotedate";s:10:"2010-11-18";}
Page 3. reload by form submit:
Serialized data at begin of page: a:3:{s:7:"counter";i:0;s:8:"quote";i:1023;s:9:"quotedate";s:10:"2010-11-18";}
Current session id: vbbpohof2jo757eaj5jrp4dv02
$_SESSION['quote']: 1023
$_SESSION['counter']: 1
...
Serialized data at end of page: a:3:{s:7:"counter";i:1;s:8:"quote";i:1023;s:9:"quotedate";s:10:"2010-11-18";}
Page 4. reload by form submit:
Serialized data at begin of page: a:3:{s:7:"counter";i:1;s:8:"quote";i:1024;s:9:"quotedate";s:10:"2010-11-18";}
Current session id: vbbpohof2jo757eaj5jrp4dv02
$_SESSION['quote']: 1024
$_SESSION['counter']: 2
...
Serialized data at end of page: a:3:{s:7:"counter";i:2;s:8:"quote";i:1024;s:9:"quotedate";s:10:"2010-11-18";}
Page 5. reload by form submit:
Serialized data at begin of page: a:3:{s:7:"counter";i:1;s:8:"quote";i:1023;s:9:"quotedate";s:10:"2010-11-18";}
Current session id: vbbpohof2jo757eaj5jrp4dv02
$_SESSION['quote']: 1023
$_SESSION['counter']: 2
...
Serialized data at end of page: a:3:{s:7:"counter";i:2;s:8:"quote";i:1023;s:9:"quotedate";s:10:"2010-11-18";}
J'espère que cela démontre mon problème mieux que pas claire description originale. Désolé. Cette fois, les tableaux de variables de session «deux simultanés», s'ils le peuvent, semblent être actifs les uns après les autres. Parfois, d'autres est quelques fois actifs et puis un autre ...
--- EDIT ---
Ceci est concordant. Fournir plus de détails. La sortie ne semble pas être celle qui devrait être reçue à partir de votre code de débogage. Double vérifier. –
Ouais, et d'où vient «quote»? Pourquoi est-il augmenté? –
La sortie est exactement ce qui sort, seulement le ';' ajouté par moi comme sans que tout est allé à une ligne dans mon poste et la journalisation 'set _SESSION' n'a pas été inclus car c'est la dernière dans la page. Ce n'est pas relavant, le journal montre bien le problème. @Pekka: 'quote' est défini si $ _SESSION ['quote'] n'est pas défini et est supposé être incrémenté dans ce cas. Le problème est qu'il ne devrait pas être incrémenté car il est déjà défini sur cette session. – Laowai