Bonjour à tous !
J'ai bien cherché partout, je n'ai trouvé aucun forum donnant une solution à mon problème, que je ne comprend vraiment pas oO
Avant toute chose, ma version de PHP est 5.6.17-0+deb8u1. Et oui, session_start() est bien appelé partout.
J'ai une page n°1 où l'utilisateur saisi des données, il clique sur "suivant", un script s'exécute et enregistre divers résultats dans des champs de $_SESSION, il est redirigé vers une page n°2 où on lui demande d'autres informations.
Cette page n°2 vérifie avant de s'afficher, les résultats enregistrés dans $_SESSION par le script exécuté après la page n°1. S'il y a un manque ou un problème, elle redirige vers la page n°1 pour recommencer.
Important : les pages 1 et 2 sont des sous parties d'une page plus globale, qui exécute quoi qu'il arrive une fonction, cleanContext(), qui supprime les champs de $_SESSION qui n'ont pas de lien avec la page à afficher ou qui sont donc obsolètes. Par exemple, si la page a afficher n'est ni page 1 ni page 2, elle supprimera les résultats enregistrés par le script.
Donc en pratique, quand je clique sur suivant de la page1, ça marche, page2 s'affiche normalement, très bien, mais théoriquement, si je me trouve sur page2, et que je fais un refresh, la page 2 devrait systématiquement se ré afficher identique, avec les infos de page 1, puisqu'il n'y a aucune raison qu'elles disparaissent.
Sauf que... ça marche pas Et là, je sèche vraiment, ça fait 3 jours que cherche... La page 2 me renvoie systématique sur la page 1 lorsque je la raffraichis... Et si j'affiche $_SESSION, je constate que mes valeurs ont effectivement disparues, donc que cleanContext() a fait un travail qu'elle n'aurait pas du faire...
Avant d'aller plus loin, cleanContext() ressemble à ça :
Et là, ça devient vraiment compliqué. Car si je met en commentaire dans cette fonction les unset() qui correspondent à page 1 et 2, je n'ai plus aucun problème, je peux faire refresh autant que je veux. Mais évidemment ça ne va pas car si je vais sur une autre page, les données ne seront pas nettoyées alors qu'elles devraient l'être, bref ça c'est normal !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 function cleanContext() { // Page 1 ou 2. if(($GLOBALS['page'] != 'page1') && ($GLOBALS['page'] != 'page2')) { echo "test désespéré"; // Pour débuggage... unset([$_SESSION['info1']); unset([$_SESSION['info2']); unset([$_SESSION['info3']); } // Page X. if(($GLOBALS['page'] != 'pageX)) { unset([$_SESSION['infoQuelconque']); } }
Là où c'est grave, c'est que "test desespéré" n'est jamais affiché lorsque je fais mon refresh !! D: Comme si ce bloc n'était jamais exécuté !!!!! Alors que si ! Puisque les unset() sont eux exécutés ! Si j'affiche d'autre pages, "test desespéré" s'affiche bien (normal).
J'ai essayé de remplacé les unset() par des $_SESSION['info1'] = null; (le test s'effectuant avec un empty(), le résultat est le même), mais même problème ! Le null est affecté alors que le echo n'est pas exécuté !!!
Bref j'y comprend rien, help please
EDIT : je me suis trompé de catégorie, je voulais poster dans langage... :s désolé
Partager