PHP perte de session avec header

Résolu/Fermé
mike0379 Messages postés 6 Date d'inscription lundi 17 mars 2008 Statut Membre Dernière intervention 1 avril 2008 - 17 mars 2008 à 17:02
mike0379 Messages postés 6 Date d'inscription lundi 17 mars 2008 Statut Membre Dernière intervention 1 avril 2008 - 19 mars 2008 à 10:53
Bonjour,
voilà je fais le truc classique d'authentification.
j'ai donc une page index.php où il faut saisir login et pwd et une autre loginForm.php où il y a le traitement.
Une fois authentifié, j'enregsitre mes variables de sessions avec session_register.
Pour finir, j'appelle la commande header pour revenir à ma page index.php.
Pb: une fois revenu à ma page index.php, les variables de sessions sont vides.

j'ai fait tout un tas de recherches mais sans succès.
Est ce une faute de programmation? Un paramètrage non fait dans le php.ini de wamp?

A noter que si dans loginForm.php, j'utilise la commande include($_SERVER['DOCUMENT_ROOT']."index.php"); au lieu de header("Location: http://" . $_SERVER['HTTP_HOST']. "/" . "index.php"); je retrouve mes variables de session!

merci de votre aide.

voici mon code:
//index.php

<?php
session_name();
session_start();
echo "login:'".$login."'";

<form method="POST" action="/phpform/loginForm.php">
<table border="0" cellpadding="1" cellspacing="0">
<tr>
<td>Identifiant : </td>
<td>
<input name="loginForm" tabindex="1" type="text"/>
</td>
</tr>
<tr>
<td>Mot de passe</td>
<td>
<input name="passwordForm" tabindex="2" type="password"/>
</td>
</tr>
<tr>
<td colspan="2" align="right">
<input name="Identification" type="submit" tabindex="3" value="Connexion"/>
</td>
</tr>
</table>
</form>

...?>

//loginForm.php
<?php
session_name();
session_start();

//fonction login() de vérification du login et du mot de passe

if (!login())
{
session_destroy();
header("Location: http://" . $_SERVER['HTTP_HOST']. "/" . "index.php");
}
else
{
$login=$_POST['loginForm'];
$password=$_POST['passwordForm'];
$id_session=session_id();
session_register("login");
session_register("password");
session_register("id_session");
header("Location: http://" . $_SERVER['HTTP_HOST']. "/" . "index.php");
}
?>
A voir également:

6 réponses

Bonjour

Pour enregistrer tes variables de session, n'utilise pas session_register('variable') mais plutôt $_SESSION['variable']=valeur. session_register ne marche pas si register_globals est désactivé et justement, depuis PHP 4.2, cette directve est désactivée par défaut.
4
Newphy Messages postés 102 Date d'inscription dimanche 24 février 2008 Statut Membre Dernière intervention 11 avril 2012 14
17 mars 2008 à 22:11
Sur un site, j'ai mit session_start() en haut (parce que sinon ça ne marche pas). Et dans le script d'authentification, si le login est bon $_SESSION['pseudo'] sera égal au pseudo (login...) et si le gars veut se déconnecter la valeur de $_SESSION['pseudo'] sera nulle (donc a préciser dans le script de ne pas afficher la page si $_SESSION['pseudo'] est nulle). Et les redirections avec du javascript (location.href='ma_page.truc'). J'espère que ça a put t'aider parce que chez moi cette méthode marche super.
0
mike0379 Messages postés 6 Date d'inscription lundi 17 mars 2008 Statut Membre Dernière intervention 1 avril 2008
18 mars 2008 à 09:25
merci mais j'ai mis session_start() et session_register est équivalent à $_SESSION.

ensuite pour le javascript, je veux éviter d'écrire du code qui sera coté client, c'est pourquoi je préfère le gérer directement en php.

ce que je ne comprends pas c'est que sur des posts présentant du code avec header cela semble fonctionner. alors pourquoi pas moi?
je me dis que j'ai peut être oublié de modifier un paramètre dans mon php.ini ou un truc comme ca, mais je ne sais pas.

Quelqu'un a t il une idée?
0
Newphy Messages postés 102 Date d'inscription dimanche 24 février 2008 Statut Membre Dernière intervention 11 avril 2012 14
18 mars 2008 à 20:53
je suis désolé je ne peux pas t'aider, je ne connais pas trop les headers :s
0
mike0379 Messages postés 6 Date d'inscription lundi 17 mars 2008 Statut Membre Dernière intervention 1 avril 2008
19 mars 2008 à 08:51
ah merci! ca fonctionne.
Utiliser session_register ou $SESSION fonctionne très bien lorsque register_globals est désactivé et lorsuq'on utilise les include.
Mais effectivement, cela ne fonctionne plus avec les headers.
J'ai donc activé register_globals et maintenant tout marche.
Merci!
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Bonjour

J'ai donc activé register_globals
Ce qu'il ne fallait pas faire . Tu ouvres la porte à de nombreuses attaques contre ton serveur, mais bon, c'est toi qui vois...
https://www.php.net/manual/fr/security.globals.php
0
mike0379 Messages postés 6 Date d'inscription lundi 17 mars 2008 Statut Membre Dernière intervention 1 avril 2008
19 mars 2008 à 10:05
OK mais alors comment fais je?
0
N'utilise jamais session_register. Si tu manipules tes variables de session UNIQUEMENT sous la forme $_SESSION[], avec register_globals desactivé, ça marche très bien, avec ou sans headers.
Au passage, à quoi sert le session_name() que tu mets au début de tes scripts ?
0
mike0379 Messages postés 6 Date d'inscription lundi 17 mars 2008 Statut Membre Dernière intervention 1 avril 2008
19 mars 2008 à 10:53
effectivement cela fonctionne.
merci.
0