pb récupération de variable d'une session

Eléphant du PHP | 120 Messages

20 avr. 2006, 12:15

slt a tous,
j'ai un petit soucis, comme vous l'aurez compris, lié a la récupération d'une variable créée dans une session.
je crée ma session et la variable 'identification' dans cette session. lors de la "validation" du formulaire (clic sur bouton qui génère un envoi par methode post), la variable n'est plus reconnue. je fais un 1é test dans le formulaire et il reconnait bien la variable. mais apres l'envoi de ce formulaire le meme test ne reconnait plus la variable de la session.

formulaire : identification.php
<?php
session_start();
echo"<HTML><head><title>identification</title></head><body>";
session_register("identification");
if(isset($_SESSION["identification"])==false)
{
 echo "pas de session";
}
else {
echo "session ok";
$_SESSION['identification']=true;
}
echo "<form name='formulaire' method='post' action='controller.php'>";
 echo "<input type='text' name='nni'><br>";
 echo "<input type='password' name='mdp'><br>";
 echo "<input type='submit' value='envoyer'>";
controller.php :
<?php
if(isset($_SESSION["identification"])==false)   
{
 echo "pas de session";
}
else { ...
il m'affiche a chaque fois "pas de session" apres appel a controller.php or qu'il m'affichait "session ok" avant cet appel.
quel est l'erreur svp ?

ant
Eléphant du PHP | 161 Messages

20 avr. 2006, 12:23

2 choses qui vont pas:

Tu oublies de déclarer :
session_start();
dans controller.php

Ensuite évite d'utiliser session_register() car comme le précise la doc php et je la reprendrai mot pour mot:
Si vous voulez que votre script fonctionne indépendamment de la configuration de la directive register_globals, vous devez utiliser la variable $_SESSION. Tous les éléments de $_SESSION sont automatiquement enregistrés. Si votre script utilise session_register(), il ne fonctionnera pas dans les environnements où register_globals est désactivée.
register_globals : note importante : Depuis PHP 4.2.0, la valeur par défaut de la directive de configuration PHP register_globals vaut off. La communauté PHP vous recommande de ne pas dépendre de cette directive, mais de trouver d'autres moyens pour accéder aux données, tels que les superglobals.

Si vous utilisez $_SESSION (ou $HTTP_SESSION_VARS), n'utilisez pas session_register(), session_is_registered() et session_unregister().
Donc utilise seulement le tableau $_SESSION tout comme tu le fais avec tes paramètres passés par post avec $_POST ou par get avec $_GET par ex

Sinon tu peux raccourcir ton code par:
if(isset($_SESSION["identification"])){
...
Le "==false" n'est pas nécessaire. Je te laisse comprendre pourquoi.
Bon c'erst un détail je sais... :lol:
Modifié en dernier par ant le 20 avr. 2006, 12:28, modifié 1 fois.

Mammouth du PHP | 1776 Messages

20 avr. 2006, 12:26

deja, l'utilisation de session_register est pas tip top :roll:
utilise plutot $_SESSION["identification"] = FALSE;
Si votre script utilise session_register(), il ne fonctionnera pas dans les environnements où register_globals est désactivée.
si register global est desactivé sur ton hébergement, normal que ca cafouille :wink:

D'après ce que j'ai compris de ton script, c'est un problème de variable globale

Eléphant du PHP | 120 Messages

20 avr. 2006, 12:34

tré bien, merci les gars ca marche nikel.
en faite j'avais pas mis session_register(), mais vu que ca marchait pas je me suis dit que c'est a cause de ca, alors je l'ai rajouté. mais la veritable erreur ct de pas mettre session_start() dans controller.php. je ne savait pas qu'il fallait le mettre de partout celui la.
merci encore pour vos reponses, j'ai corrigé l'erreur.