php perte de variable de SESSION

marih
Invité n'ayant pas de compte PHPfrance

10 juin 2013, 16:50

Bonjour,
je tourne en rond sur une "perte" de variable de SESSION.
Dans un enchainement de programmes je passe la variable ID en SESSION. Elle est initialisée au début de tous les programmes dans un formulaire par POST.
Dans le programme A j'écris:
session_start();
$ID = $_SESSION["ID"];
$_SESSION["ID"] = $ID;
Ce programme accède à un html qui me permet d'atteindre un prog B qui contient la même chose:
session_start();
$ID = $_SESSION["ID"];
$_SESSION["ID"] = $ID;
La variable $ID est vide.
Ici ça ne marche pas alors que ça marche ailleurs...!
J'ai transformé le html en php idem.
Je suis sous Modzilla.
Avez-vous une idée car je ne comprends pas ?
merci de votre aide.

Mammouth du PHP | 2278 Messages

10 juin 2013, 19:30

Comme toujours, la première chose à faire est de s'assurer que les variables contiennent bien ce qu'on croit:
session_start(); // doit être la première instruction
$ID = $_SESSION["ID"];
var_dump($ID);
$_SESSION["ID"] = $ID;
// et si $ID contient quelque chose
print_r($_SESSION);
et après on peut discuter
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD

marih
Invité n'ayant pas de compte PHPfrance

10 juin 2013, 20:42

OK, merci de ton aide.
Voici, le prog A contient:
<?php
session_start();
$MotDePasse = $_SESSION["MotDePasse"];
var_dump($MotDePasse);
print_r("<br>$_SESSION");
print_r("<br>MDP = '$MotDePasse'");
exit;
Ca donne:
string(5) "toto"
Array
MDP = 'toto'
J'enchaine sur le prog B
<?php
session_start();
$MotDePasse = $_SESSION["MotDePasse"];
var_dump($MotDePasse);
print_r("<br>$_SESSION");
print_r("<br>MDP = '$MotDePasse'");
exit;
Cela donne:
Array ( )
MDP = ''
Le MotDePasse a disparu.

Mammouth du PHP | 2278 Messages

10 juin 2013, 22:10

Le programme A une fois corrigé:
<?php
session_start();
//il est bien évident que pour que ça fonctionne il faut que $_SESSION['MotDePasse'] ait été initialisé ce qui n'est pas le cas: l'affichage que tu présentes est impossible en l'état.
$MotDePasse = $_SESSION["MotDePasse"];
var_dump($MotDePasse);
print_r($_SESSION);
print"<br>MDP = $MotDePasse";
exit;
//la fin de PHP c'est quand même mieux 
?>
en revanche ceci:
<?php
session_start();
$MotDePasse = "toto";
var_dump($MotDePasse);
$_SESSION['MotDePasse']= $MotDePasse;
print_r($_SESSION);
print"<br>MDP = $MotDePasse";
exit;
?>
et cela:
<?PHP
session_start();
print_r($_SESSION);
?>
fonctionnent iùmpeccablement.
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD

marih
Invité n'ayant pas de compte PHPfrance

11 juin 2013, 09:13

Bonjour,
c'est évident mon cher Watson !
Il y a 300 programmes qui tournent sur ce schéma donc la variable "$MotDePasse" est initialisée bien avant dans le système par un formulaire POST, sinon à quoi serviraient les variables de SESSION ?
Donc quand j'entre dans le prog A la variable de SESSION "$MotDePsse" est déjà initialisée, c'est pourquoi elle apparait sur le premier "print" des variables.

Mammouth du PHP | 2278 Messages

11 juin 2013, 09:38

Si c'est si simple...
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD

Invité
Invité n'ayant pas de compte PHPfrance

11 juin 2013, 11:08

Mon cher Sirakawa,
tu as du zapper la fin de l'histoire... le prog A reçoit bien la variable "$MotDePasse" mais ensuite par un lien <a"href="ProgB.php"...> basique je vais dans le Prog B comme indiqué ci dessus et là, la variable a disparu comme indiqué !
Et je ne comprends pas pourquoi ? ET toi ?

Mammouth du PHP | 1967 Messages

11 juin 2013, 11:54

place un "echo $_SESSION['MotDePasse'];" un peu partout, il doit bien y avoir une destruction de session quelque part.

Tu ne change pas de site entre A et B ? c'est toujours le même domaine ? tes liens sont ils absolu ou relatif ?

Autre piste, place un sniffeur à chaque session_destroy() de ton projet, si tu passe par l'un d'eux tu devrait le voir.
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone du rubik's cube

maroh
Invité n'ayant pas de compte PHPfrance

11 juin 2013, 13:18

Salut Spols,
j'ai effectivement pensé à une destruction du $MotDePasse, mais le prog A est très simple ce sont des liens et une vérification de l'utilisateur sur la base de ce mot.
Non je ne change pas de domaine et je ne passe par aucune session_destroy
Je vais essayer tes suggestions.
Par contre je ne connais pas la différence entre lien absolu et un relatif ? je donne les adresses sous différentes formes, par exemple:
<a href="http://siteweb.com/Librairie/ProgA.php target='_parent'>
ou bien
<a href="ProgC.php target='_parent'>
Ce qui me paralyse c'est que j'ai des centaines de prog qui s'enchainent comme ces deux là et qu'ils marchent !
C'est infernal de tourner en rond ?

marih
Invité n'ayant pas de compte PHPfrance

11 juin 2013, 13:53

Suite...
comme suggéré j'ai placé plusieurs "echo" jusqu'à la fin du programme. La variable $_SESSION["MotDePasse"] contient toujours "toto".
La seule chose que j'ai bypassée c'est l'affichage final fait par un FRAMSET car si je le laisse je ne vois pas les "echo".
Question: est-ce normal que le echo("$_SESSION") donne seulement le mot "Array" sans autre indication ?

Mammouth du PHP | 1967 Messages

11 juin 2013, 14:37

Je ne sais pas très bien quoi te conseiller de plus, mais le passage par frameset n'est peut être pas le plus indiqué.

un echo($_SESSION); n'affichera que Array car $_SESSION est une Array et echo ne développe pas plus que cela une Array
Pour développer, il y a print_r ou var_dump

Edit c'est du boulot, mais si tu remplace ton prog A par un autre qui fonctionne, et que tu modifie petit à petit pour qu'il fasse la même chose que A en vérifiant à chaque modif qu'il fonctionne toujours tu verra quelles modifs fait planter le tout (ou tu aura un prog qui fonctionne)
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone du rubik's cube

marih
Invité n'ayant pas de compte PHPfrance

11 juin 2013, 15:36

Merci à tous,
je vais repartir à zéro pour ce programme...

marih
Invité n'ayant pas de compte PHPfrance

11 juin 2013, 16:28

Une dernière question:
si entre 2 programmes php il y a un prog html: la SESSION est elle coupée ou perdue ?

Ex: de ProgA.php je vais dans ProgB.htm puis dans progC.php.

Est-ce que dans ProgC je retrouve les variables de SESSION disponibles dans ProgA ?

marih
Invité n'ayant pas de compte PHPfrance

21 juin 2013, 09:33

J'ai initialisé une question spécifique sur le sujet voir : "perte de SESSION en utilisant un programe html ? ".
Merci de votre aide.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

21 juin 2013, 20:07

Modération :
Le multipostage est interdit sur le forum.

Ce sujet a été verrouillé et sera supprimé sous peu.
Des réponses peuvent être apportées à cette adresse :
php-avance/perte-session-utilisant-prog ... 68383.html

Merci de prendre le temps de lire les règlements.
Il en faut peu pour être heureux ......