Rechercher : dans
Par :

PHP perte de session avec header

Dernière réponse le 19 mar 2008 à 10:53:28 mike0379, le 17 mar 2008 à 17:02:08 
 Signaler ce message aux modérateurs

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");
}
?>

Configuration: Windows XP
Internet Explorer 6.0
WAMP

Meilleures réponses pour « PHP perte de session avec header » dans :
[PHP] Headers already sent by..... VoirLorsque vous utilisez une fonction PHP qui manipule les en-têtes HTTP comme par exemple: header() setcookie() session_start() Il est important d'utiliser ces fonctions avant d'avoir généré le moindre flux vers le client. A partir du moment où...
PHP - Les fonctions VoirLa notion de fonction On appelle fonction un sous-programme qui permet d'effectuer un ensemble d'instructions par simple appel de la fonction dans le corps du programme principal. Les fonctions permettent d'exécuter dans plusieurs parties du...
PHP - Les cookies et les en-têtes HTTP VoirLes en-têtes HTTP Lors de chaque échange par le protocole HTTP entre votre navigateur et le serveur, des données dîtes d'en-têtes contenant des informations sur les données à envoyer (dans le cas d'une requête) ou envoyées (dans le cas d'une...

1

Newphy, le 17 mar 2008 à 22:11:14

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.

Répondre à Newphy

2

mike0379, le 18 mar 2008 à 09:25:54

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?

Répondre à mike0379

3

Newphy, le 18 mar 2008 à 20:53:01

Je suis désolé je ne peux pas t'aider, je ne connais pas trop les headers :s

Répondre à Newphy

4

le père, le 18 mar 2008 à 22:02:05
  • +3

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.

Répondre à le père

5

mike0379, le 19 mar 2008 à 08:51:39

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!

Répondre à mike0379

6

le père, le 19 mar 2008 à 09:04:59

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

Répondre à le père

7

mike0379, le 19 mar 2008 à 10:05:15

OK mais alors comment fais je?

Répondre à mike0379

8

le père, le 19 mar 2008 à 10:12:00

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 ?

Répondre à le père

9

 mike0379, le 19 mar 2008 à 10:53:28

Effectivement cela fonctionne.
merci.

Répondre à mike0379