variable session

arnl
Invité n'ayant pas de compte PHPfrance

07 juin 2005, 09:39

salut :)

j'utilise des variables de sessions sur mon site de cette façon...

je posséde une page :
membres.php avec comme en tête
session_start();
if(isset($_SESSION['login']))
{
    $login = $_SESSION['login'];
    header("Location: compte.php");
}
	else
	{
	    $login = "";
	}
dans cette même page jai un formulaire qui permet à 'linternaute de se logguer, lorsque qu'il valide son loggue un fichier javascript vérifie si les champs sont rempli et appel la page compte.php.
Jusque la tout va bien.

sur cette page compte.php j'ai ceci
session_start();
if(isset($_SESSION['login']))
{
    $login = $_SESSION['login'];
}
	else
	{
	    $login = "";
	}
toujours au debut de ma page :) normal
le loggue se passe très bien, il a accées au informations auquel il devrait avoir. Cependant lorsque je quitte la page compte et que je vais vers une autre page si je veux ensuite revenir sur ma page ou l'internaute est loggué je clique sur membre, le header me dirige vers compte.php et là j'ai mon message d'erreur comme quoi il n'a pas rempli les champs pour se logguer.

j'espér avoir été assez clair :)

merci pour votre aide

Mammouth du PHP | 19672 Messages

07 juin 2005, 09:41

Est-ce qu'une fois le membre reconnu tu initialise ta variable de session $_SESSION['login'] ?
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

arnl
Invité n'ayant pas de compte PHPfrance

07 juin 2005, 09:55

salut cyrano

lorsque le login et mot de passe sont correct je fais cela :

//variable session
$_SESSION['login'] = $login;
$_SESSION['pass'] = $password;

et j'affiche le reste de la page avec ces informations.

je récupère $_SESSION['pass'] = $password; car dans ma page compte.php j'effectue ce test.

if(isset($_POST['login']) && (isset($_POST['pass'])))
{
blabla
}
else
{
echo veuillez remplir les champs
//formulaire de log
formulaire
}
mon pb peut venir de là ?
car en fait je tombe sur ce qu'il y a après le else :)

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

07 juin 2005, 09:57

et est-ce que tu as bien pensé à mettre le session_start() avant d'enregistrer tes variables de sessions ?
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Mammouth du PHP | 19672 Messages

07 juin 2005, 09:59

...
if(isset($_POST['login']) && (isset($_POST['pass'])))
{
blabla
}
else
{
echo veuillez remplir les champs
//formulaire de log
formulaire
}...
Peut-être bein qu'en faisant :
if(isset($_SESSION['login']) && (isset($_SESSION['pass'])))
{
     blabla
}
else
{
    echo veuillez remplir les champs
    // formulaire de log
    // formulaire
}
Ça fonctionnera mieux.. :?:
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

arnl
Invité n'ayant pas de compte PHPfrance

07 juin 2005, 10:08

bah en fait le session_start() je le fais partir sur ma page compte.php comme vu la haut.

ton code ne fonctionne pas cyrano puisque pour pouvoir me logguer je verifie si les champs login et pass sont rempli. je suis tombé sur le else encore une fois.
:cry:

Invité
Invité n'ayant pas de compte PHPfrance

07 juin 2005, 10:15

ola ! alors apparemment c'était bien ma condition qui faisit tout planter...je m'en doutais je l'ai remplacer par ceci :

if(($login != "") || (isset($_POST['login'])))
{
if(isset($_POST['login']) && (isset($_POST['pass'])))
{
$login = $_POST['login'];
$password = $_POST['pass'];
}
blabla


et apparemment ça fonctionne ;)

merci !

Mammouth du PHP | 19672 Messages

07 juin 2005, 10:16

Il te faut distinguer les rôles de chaque variable : $_SESSION est un tableau super-global qui te permet d'utiliser des variables tout au long d'une session de navigation; $_POST transporte des valeurs en provenance d'un formulaire: donc dans ta page de login, tu vas utiliser les deux: mais sois logique avec le test d'entrée de page: À la rigueur, tester si la variable de session est initialisée au début de la page de validation ne sert pas à grand chose, par contre, il faut effectivement tester $_POST. Mais avant de quitter cette page, il faut initialiser $_SESSION et en changeant de page, tu testes au début de la nouvelle page les valeurs dans $_SESSION.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

07 juin 2005, 10:17

Ta méthode ne fonctionnera que si tu inclu toutes tes pages dans la page compte.php !!!

Mais tu doit faire un session_start() au début de chaque script dans lequel tu vas utiliser des variables de sessions !!!

exemple

quand tu appelle ta page de vérification de login => session_start()

quand tu affiche la page d'acceuil => session_start()
si la page compte.php est inclu dans la page d'acceuil (include("compte.php")), => pas de session_start()

Est-ce que j'ai réussi à me faire comprendre ?
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

arnl
Invité n'ayant pas de compte PHPfrance

07 juin 2005, 10:19

oui j'ai parfaitement compris ;)
un manque de logique sur ce coup la j'avoue.

mon code parait plus correct comme ça nan ?! :)
merci encore