Précédent   Forum des professionnels en informatique > PHP > Langage > Sessions
Sessions Forum d'entraide sur les sessions avec PHP. Avant de poster -> FAQ sessions, Cours sessions et Sources sécurité
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 19/05/2011, 10h37   #1
Membre régulier
 
Homme Yoann Bianchin
Développeur informatique
Inscription : avril 2007
Messages : 158
Détails du profil
Informations personnelles :
Nom : Homme Yoann Bianchin
Âge : 25
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : avril 2007
Messages : 158
Points : 93
Points : 93
Par défaut Variable de session qui ne se modifie pas ou cache de session ?

Bonjour,

j'ai un comportement bizarre lors de l'utilisation d'une session dans laquelle je place un tableau de valeur... Je m'explique :

Ma page appelé effectue le code suivant : (je passe les parties ininteressantes)

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 
session_start();
 
// Supprime la variable de session tab_erreur si elle existe
if(isset($_SESSION["tab_erreur"])) { unset($_SESSION["tab_erreur"]); }
 
[...]
 
$tab_erreur = array();
$tab_erreur["type"] = "SERVEUR_INEXISTANT_CMDB";
$tab_erreur["message"] = "Le serveur ".$str_serveur." n'existe plus en cmdb. Vous ne pouvez donc plus faire de demandes de supervision sur celui-ci.";
$tab_erreur["url_retour"] = VERS_ACCUEIL;
$_SESSION["tab_erreur"] = $tab_erreur;
 
//echo print_r($_SESSION);die;
 
// rediriger vers erreur.php
header('Location: ' . VERS_ERREUR);
Si je décommente le print_r($_SESSION); les valeurs sont les bonnes.

Ma page erreur.php qui est appelée est la suivante :

Code :
1
2
3
4
5
6
7
8
9
10
 
session_start();
 
// Récupération des variables de session
$tab_erreur = $_SESSION["tab_erreur"];
$str_type_erreur = $tab_erreur["type"];
$str_message_erreur = $tab_erreur["message"];
$str_url_retour = $tab_erreur["url_retour"];
 
echo print_r($_SESSION);die;
Et là, l'execution de ce print_r($_SESSION); ne me retourne pas les bonnes valeurs pour le tableau tab_erreur.
Il me retourne d'autres valeurs que j'ai du avoir lors d'une erreur précédente lors de tests sur d'autres parties de mon application.

Quelqu'un voit-il d'où vient le problème ?!

Merci d'avance.
Bizoo
Bizoo est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 19/05/2011, 11h47   #2
Membre chevronné
 
Avatar de hmimoud
 
Homme
Étudiant
Inscription : mai 2011
Messages : 122
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Maroc

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : mai 2011
Messages : 122
Points : 728
Points : 728
Quand tu decommente
Code :
//echo print_r($_SESSION);die;
dans la premiere page ca marche ou pas?
hmimoud est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 19/05/2011, 11h50   #3
Membre régulier
 
Homme Yoann Bianchin
Développeur informatique
Inscription : avril 2007
Messages : 158
Détails du profil
Informations personnelles :
Nom : Homme Yoann Bianchin
Âge : 25
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : avril 2007
Messages : 158
Points : 93
Points : 93
Citation:
Envoyé par Bizoo Voir le message
Si je décommente le print_r($_SESSION); les valeurs sont les bonnes.
Donc oui si je regarde ce qu'il y a en session juste après y avoir placé mes nouvelles valeurs, tout est OK !
Bizoo est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 19/05/2011, 11h53   #4
Membre chevronné
 
Avatar de hmimoud
 
Homme
Étudiant
Inscription : mai 2011
Messages : 122
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Maroc

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : mai 2011
Messages : 122
Points : 728
Points : 728
Est ce que les valeurs qui sont bonnes s'affichent sur la premiere ou deuxieme page, essaye d'etre plus clair
hmimoud est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 19/05/2011, 12h01   #5
Membre régulier
 
Homme Yoann Bianchin
Développeur informatique
Inscription : avril 2007
Messages : 158
Détails du profil
Informations personnelles :
Nom : Homme Yoann Bianchin
Âge : 25
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : avril 2007
Messages : 158
Points : 93
Points : 93
Tout est dans le premier post :

1er écran : code => variables session OK
appelle du deuxième écran
2ème écran : code => variables session KO

Je vois pas comment être plus clair que dans mon premier post, désolé ...
Bizoo est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 19/05/2011, 12h20   #6
Membre chevronné
 
Avatar de hmimoud
 
Homme
Étudiant
Inscription : mai 2011
Messages : 122
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Maroc

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : mai 2011
Messages : 122
Points : 728
Points : 728
La tu as ete plus clair.

Quand tu met sur le premier ecran
Code :
1
2
3
$_SESSION["tab_erreur"] = $tab_erreur;
 
echo print_r($_SESSION);die;
,tu affecte le tableau à la session, c'est normal que ca s'affiche!
Mais dans le 2eme, tu fais le contraire, c'est la session que tu affectes au tableau.
Code :
1
2
3
4
session_start();
 
$tab_erreur = $_SESSION["tab_erreur"];
 echo print_r($_SESSION);die;
Donc tu as 2 solutions :
1ere: afficher directement la session avec comme parametre le tableau:

Code :
1
2
session_start();
echo print_r($_SESSION["tab_erreur"]);die;
2eme: affecter ta session a un tableau puis l'afficher :

session_start();

Code :
1
2
3
$tab_erreur = $_SESSION["tab_erreur"];
echo print_r($tab_erreur//affichage du tableau);
die;
Bonne Chance !
hmimoud est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 19/05/2011, 12h22   #7
Membre régulier
 
Avatar de Pierrot2Mars
 
Homme Pierrot
Développeur Web
Inscription : novembre 2010
Messages : 79
Détails du profil
Informations personnelles :
Nom : Homme Pierrot
Localisation : France

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : novembre 2010
Messages : 79
Points : 96
Points : 96
Justement, je ne trouve pas ton 1er post très clair.
Ton premier script supprime et créé la SESSION.
Puis la redirection enchaine sur ton deuxième script qui effectue son affichage.
Pierrot2Mars est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 19/05/2011, 13h38   #8
Membre régulier
 
Homme Yoann Bianchin
Développeur informatique
Inscription : avril 2007
Messages : 158
Détails du profil
Informations personnelles :
Nom : Homme Yoann Bianchin
Âge : 25
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : avril 2007
Messages : 158
Points : 93
Points : 93
hmimoud, je ne vois pas en quoi tes 2 propositions entre dans un autre cas de test que ce que je fais moi.

Pour expliquer avec un exemple concret :

- j'arrive sur ma page 1
- session_start()
A ce moment là, $_SESSION["tab_erreur"] == tableauX (qui correspond à une précédente erreur)
- j'unset $_SESSION["tab_erreur"] pour supprimer toutes trâce d'une précédente erreur
- [...code...]
- une erreur survient, j'initialise un tableauY dans ma page avec les codes de l'erreur qui vient de se produire
- j'affecte à $_SESSION["tab_erreur"] le nouveau tableauY ($_SESSION["tab_erreur"] = tableauY)
A ce moment là, $_SESSION["tab_erreur"] == tableauY
Ce que je vérifie bien avec le print_r($_SESSION["tab_erreur"]) qui m'affiche bien tableauY
- j'appelle ma page 2 qui est ma page d'erreur

- j'arrive sur ma page 2
- session_start()
- je récupère ma variable $_SESSION["tab_erreur"]
Normalement, vous êtes d'accord avec moi qu'il devrait tjrs y avoir tableauY dans cette variable ?!
Et ben lorsque je fait un print_r($_SESSION["tab_erreur"]) ce n'est pas tableauY mais tableauX qui s'affiche !!!....

Et je comprends vraiment pas ...




PAGE 1 :
suppression variable de session V1
initialisation variable locale V2
mise en session de la variable locale V2 dans la variable de session V1
appelle PAGE 2
PAGE 2 :
affichage de la variable de session V1 => Pas la bonne

je suis hors de moi de rencontrer un problème sur un mécanisme comme celui-ci ......
Bizoo est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 19/05/2011, 13h44   #9
En attente de confirmation mail
 
Inscription : juin 2002
Messages : 6 164
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 6 164
Points : 6 404
Points : 6 404
Si on laisse de côté le code en lui-même (et sa logique) : vous ne travaillez pas avec les register_globals à On ? Sait-on jamais, la session est bien la même (ie même identifiant propagé) ?
julp est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 19/05/2011, 14h03   #10
Membre régulier
 
Homme Yoann Bianchin
Développeur informatique
Inscription : avril 2007
Messages : 158
Détails du profil
Informations personnelles :
Nom : Homme Yoann Bianchin
Âge : 25
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : avril 2007
Messages : 158
Points : 93
Points : 93
Citation:
Envoyé par julp Voir le message
Si on laisse de côté le code en lui-même (et sa logique) : vous ne travaillez pas avec les register_globals à On ? Sait-on jamais, la session est bien la même (ie même identifiant propagé) ?
Oui, register_globals à off
Oui, l'identifiant de la session est le même des 2 côtés

Quand tu parle du code et de sa logique, je sens que tu as des remarques dessus ! En passant, pourrais-tu m'en faire part stp ?!
Je ne suis jamais contre quelques conseil et quelques corrections de mon code pour améliorer ma façon de développer !!!
Bizoo est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 19/05/2011, 14h07   #11
Membre chevronné
 
Avatar de hmimoud
 
Homme
Étudiant
Inscription : mai 2011
Messages : 122
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Maroc

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : mai 2011
Messages : 122
Points : 728
Points : 728
J'ai tout a fait compris,
Mes 2 propositions sont à essayés dans la 2eme page.
Essaye de les tester et de les lire attentivement, ca explique bien la logique du probleme.
Sinon, essaye de laisser ton code de la 2eme page comme tu as fais au debut,
et affiche les variables ou tu recupere les elements du tableaux un a un !

A+

[Résolu]
hmimoud est déconnecté   Envoyer un message privé Réponse avec citation 21
Vieux 19/05/2011, 14h16   #12
Membre régulier
 
Homme Yoann Bianchin
Développeur informatique
Inscription : avril 2007
Messages : 158
Détails du profil
Informations personnelles :
Nom : Homme Yoann Bianchin
Âge : 25
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : avril 2007
Messages : 158
Points : 93
Points : 93
Citation:
Envoyé par hmimoud Voir le message
J'ai tout a fait compris,
Mes 2 propositions sont à essayés dans la 2eme page.
Essaye de les tester et de les lire attentivement, ca explique bien la logique du probleme.
Sinon, essaye de laisser ton code de la 2eme page comme tu as fais au debut,
et affiche les variables ou tu recupere les elements du tableaux un a un !

A+

[Résolu]
Même si je n'y croyais pas j'ai essayé tes 2 propositions !
Et comme je le pensais, aucun changement....

[Non résolu]
Bizoo est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 19/05/2011, 14h34   #13
Membre régulier
 
Avatar de Pierrot2Mars
 
Homme Pierrot
Développeur Web
Inscription : novembre 2010
Messages : 79
Détails du profil
Informations personnelles :
Nom : Homme Pierrot
Localisation : France

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : novembre 2010
Messages : 79
Points : 96
Points : 96
Très étrange tont problème...

Essaye d'écraser ta session avant de la détruire.

Code :
1
2
3
4
if(isset($_SESSION["tab_erreur"])) { 
	$_SESSION["tab_erreur"] = array();
	unset($_SESSION["tab_erreur"]);
}
Pierrot2Mars est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 19/05/2011, 14h36   #14
Membre régulier
 
Homme Yoann Bianchin
Développeur informatique
Inscription : avril 2007
Messages : 158
Détails du profil
Informations personnelles :
Nom : Homme Yoann Bianchin
Âge : 25
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : avril 2007
Messages : 158
Points : 93
Points : 93
Citation:
Envoyé par Pierrot2Mars Voir le message
Très étrange tont problème...

Essaye d'écraser ta session avant de la détruire.

Code :
1
2
3
4
if(isset($_SESSION["tab_erreur"])) { 
	$_SESSION["tab_erreur"] = array();
	unset($_SESSION["tab_erreur"]);
}
Je n'avais effectivement pas essayé ça.
Mais le problème reste le même ... damned !
Bizoo est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 19/05/2011, 14h37   #15
Membre régulier
 
Avatar de Pierrot2Mars
 
Homme Pierrot
Développeur Web
Inscription : novembre 2010
Messages : 79
Détails du profil
Informations personnelles :
Nom : Homme Pierrot
Localisation : France

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : novembre 2010
Messages : 79
Points : 96
Points : 96
Citation:
Envoyé par Bizoo Voir le message
Je n'avais effectivement pas essayé ça.
Mais le problème reste le même ... damned !
Alors essaye sans la condition du if()
Code :
1
2
// Supprime la variable de session tab_erreur
unset($_SESSION["tab_erreur"]);
Pierrot2Mars est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 19/05/2011, 14h54   #16
Membre régulier
 
Homme Yoann Bianchin
Développeur informatique
Inscription : avril 2007
Messages : 158
Détails du profil
Informations personnelles :
Nom : Homme Yoann Bianchin
Âge : 25
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : avril 2007
Messages : 158
Points : 93
Points : 93
Citation:
Envoyé par Pierrot2Mars Voir le message
Alors essaye sans la condition du if()
Code :
1
2
// Supprime la variable de session tab_erreur
unset($_SESSION["tab_erreur"]);
Déjà testé ... Testé aussi en laissant une trâce dans ma condition voir si il passait bien et ça passe bien dedans.
Bizoo est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 19/05/2011, 15h04   #17
Membre régulier
 
Avatar de Pierrot2Mars
 
Homme Pierrot
Développeur Web
Inscription : novembre 2010
Messages : 79
Détails du profil
Informations personnelles :
Nom : Homme Pierrot
Localisation : France

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : novembre 2010
Messages : 79
Points : 96
Points : 96
De plus en plus étrange... je dirais même louche.

Si tu n'as pas d'autre variables de SESSION, essaye un :
Edit : n'oublie pas de remettre un session_start(); après.
Pierrot2Mars est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 19/05/2011, 15h16   #18
Membre régulier
 
Homme Yoann Bianchin
Développeur informatique
Inscription : avril 2007
Messages : 158
Détails du profil
Informations personnelles :
Nom : Homme Yoann Bianchin
Âge : 25
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : avril 2007
Messages : 158
Points : 93
Points : 93
Citation:
Envoyé par Pierrot2Mars Voir le message
De plus en plus étrange... je dirais même louche.

Si tu n'as pas d'autre variables de SESSION, essaye un :
Edit : n'oublie pas de remettre un session_start(); après.
Ma session se détruit bien car j'avait d'autres variables en session qui n'y sont plus au redemarrage de la session.
Par contre à l'affichage de mon erreur, c'est tjrs une autre erreur qui s'affiche !

Là j'y comprend plus rien .... Je crois que je vais tout redemarrer....
Bizoo est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 19/05/2011, 15h24   #19
Membre régulier
 
Avatar de Pierrot2Mars
 
Homme Pierrot
Développeur Web
Inscription : novembre 2010
Messages : 79
Détails du profil
Informations personnelles :
Nom : Homme Pierrot
Localisation : France

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : novembre 2010
Messages : 79
Points : 96
Points : 96
Juste pour voir, essaye d'attribuer une valeur à ta SESSION avant ton unset() :
Code :
1
2
3
4
5
$_SESSION["tab_erreur"] = array();
$_SESSION["tab_erreur"] = array('a','b','c');
 
// Supprime la variable de session tab_erreur si elle existe
if(isset($_SESSION["tab_erreur"])) { unset($_SESSION["tab_erreur"]); }
Qu'as-tu à l'affichage dans ton script 2 ?
Pierrot2Mars est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 19/05/2011, 15h34   #20
Membre régulier
 
Homme Yoann Bianchin
Développeur informatique
Inscription : avril 2007
Messages : 158
Détails du profil
Informations personnelles :
Nom : Homme Yoann Bianchin
Âge : 25
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : avril 2007
Messages : 158
Points : 93
Points : 93
Stooopp ! On arrête tout j'ai trouvé ....

En fait dans ma page 1 un j'ai des séries de tests avec des header(location si il rencontre des erreurs et en fin de page 1 j'ai un autre header(location qui redirige vers une page 3. (dans le cas où la page n'ait pas été redirigé avant)

Et ben ce qu'il se passe c'est que même si au milieu de ma page 1, lorsque une erreur survient et donc que j'appelle ma page 2 et ben en arrière plan le code de la page 1 continue à s'executer jusqu'à la fin et donc appelle quand même la page 3 et c'est cette page qui retourne l'erreur.

Le temps que ma page d'erreur s'affiche, c'est ma page 3 qui change mes variables de session !

Je ne savais pas que le header('location... fonctionnait de la sorte !
Je pensais que ça appellait la page souhaité point barre ! Pas que le code continuait à s'executer en arrière plan ....

Solution, après mes header(location mettre un die; pour terminer l'execution de la page appellante ....

J'ai été clair ou pas ?
Parceque en me relisant j'ai pas trop l'impression .... désolé...
Bizoo est déconnecté   Envoyer un message privé Réponse avec citation 20
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 19h36.


 
 
 
 
Partenaires

Hébergement Web