Posez votre question Signaler

PHP perte de session avec header [Résolu]

mike0379 6Messages postés 17 mars 2008Date d'inscription - Dernière réponse le 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");
}
?>
Lire la suite 

PHP perte de session avec header »

9 réponses
Réponse
+3
moins plus
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.
Ajouter un commentaire
Réponse
+0
moins plus
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.
mike0379- 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?
Ajouter un commentaire
Réponse
+0
moins plus
je suis désolé je ne peux pas t'aider, je ne connais pas trop les headers :s
Ajouter un commentaire
Réponse
+0
moins plus
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!
Ajouter un commentaire
Réponse
+0
moins plus
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...
http://fr.php.net/manual/fr/security.globals.php
mike0379- 19 mars 2008 à 10:05
OK mais alors comment fais je?
Ajouter un commentaire
Réponse
+0
moins plus
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 ?
mike0379- 19 mars 2008 à 10:53
effectivement cela fonctionne.
merci.
Ajouter un commentaire
Ce document intitulé « PHP perte de session avec header » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
Passage au tout numérique : quel coût pour les particuliers ?