Précédent   Forum des professionnels en informatique > PHP > Langage > Sessions
Sessions Forum d'entraide sur les sessions avec PHP. Avant de poster -> FAQ sessions, Cours sessions et Sources sécurité
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 10/01/2011, 09h32   #1
Membre éprouvé
 
Avatar de radicaldreamer
 
Homme Guillaume
Développeur Web
Inscription : décembre 2007
Messages : 353
Détails du profil
Informations personnelles :
Nom : Homme Guillaume
Âge : 21
Localisation : France, Haut Rhin (Alsace)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : décembre 2007
Messages : 353
Points : 473
Points : 473
Par défaut Perte de session changement de page.

Bonjour,

J'ai encore un problème de session: Elle disparaît (wouuhh magiiie).


Page login:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 
<?php
  session_start();
  ob_start();
 
//.....
 
      if(($infos = $requete->fetch()) !== false){
        session_regenerate_id();
        $_SESSION['token'] = md5('sel'.$_SERVER['HTTP_USER_AGENT']);
        $_SESSION['id_utilisateur'] = $infos['id_utilisateur'];
        $_SESSION['email_utilisateur'] = $infos['email_utilisateur'];
        $_SESSION['pseudo_utilisateur'] = $infos['pseudo_utilisateur'];
        //var_dump($_SESSION); <-- affiche correctement la session
        header('location: ./index.php');//on redirige l'utilisateur sur la page d'accueil de l'administration
      }
 
 
//....
Page index.php:

Code :
1
2
3
4
5
6
7
<?php
  include('./header.php');
 
    //le reste de mon code
 
  include('./footer.php');
?>
Page header.php:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
<?php
  session_start();
  ob_start();
   //Vérification de session, on test si l'utilisateur est authentifié
   if(isset($_SESSION['token'])){
    if($_SESSION['token'] != md5('sel'.$_SERVER['HTTP_USER_AGENT'])){
      session_destroy();
      header('location: ./login.php');
    }
  }else{//fin de test session
      header('location: ./login.php');
  }
//...

Donc quand je fais un var_dump de la session dans "login.php" c'est ok, ça m'affiche les variables mais quand je redirige sur index.php (qui inclus header.php) et que je fais un var_dump($_SESSION), ça m'affiche : array empty.

Quelqu'un aurait-il une idée s'il vous plait?
__________________
Si ce que tu as à dire n'est pas plus beau que le silence, alors tais toi.

- Pensez à voter pour les messages qui vous ont été utiles ainsi que de mettre
radicaldreamer est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/01/2011, 09h50   #2
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 984
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : février 2010
Messages : 2 984
Points : 5 015
Points : 5 015
Hello

Tu pourrais expliquer pourquoi tu fais :
Code :
$_SESSION['token'] = md5('sel'.$_SERVER['HTTP_USER_AGENT']);
Dans index.php et
Code :
 if($_SESSION['token'] != md5('eco-poules.com'.$_SERVER['HTTP_USER_AGENT']))
dans login.php ??

parce que si je perçoit bien l'enchainement des évènements, quand tu arrives sur index.php sans être connecté, tu passe dans le login après avoir détruit la session et tu authentifie avec
Code :
1
2
 
md5('sel'.$_SERVER['HTTP_USER_AGENT'])
puis par la suite tu teste le token contre
Code :
1
2
 
md5('eco-poules.com'.$_SERVER['HTTP_USER_AGENT'])
ça m'a tout l'air d'un belle boucle infinie... à moins que je ne me trompe
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/01/2011, 09h58   #3
Membre éprouvé
 
Avatar de radicaldreamer
 
Homme Guillaume
Développeur Web
Inscription : décembre 2007
Messages : 353
Détails du profil
Informations personnelles :
Nom : Homme Guillaume
Âge : 21
Localisation : France, Haut Rhin (Alsace)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : décembre 2007
Messages : 353
Points : 473
Points : 473
Parce que je suis un boulet et que j'ai changé mon grain de sel pour éviter d'afficher le "vrai" en public...

Mais bon. Sinon, dans le code c'est le même ^^.
__________________
Si ce que tu as à dire n'est pas plus beau que le silence, alors tais toi.

- Pensez à voter pour les messages qui vous ont été utiles ainsi que de mettre
radicaldreamer est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/01/2011, 10h10   #4
Expert Confirmé
 
Avatar de RunCodePhp
 
Inscription : janvier 2010
Messages : 2 705
Détails du profil
Informations personnelles :
Localisation : Réunion

Informations forums :
Inscription : janvier 2010
Messages : 2 705
Points : 3 273
Points : 3 273
Salut

Dans ton topic et problème auparavant tu avais résolu ton problème en y mettant un point d'arrêt (un exit()) après la redirection (le header).

Personnellement je le fais systématiquement aussi.
D'ailleurs, ceci est une fonction qui intègre le exit(), ce qui permet de ne jamais l'oublier (suffit d'exploiter tout le temps la fonction dédiée).

Aussi, la redirection je le fais ainsi :
Code :
1
2
3
4
 
header('HTTP/1.1 303 See Other');
header('Location: '.$url);
exit();
Ce qui au bout un un poil différent, car un header('Location: ') renvoir une entête HTTP 302 théoriquement, qui sous entend que c'est une page temporaire.
Or, ce n'est pas temporaire, c'est systématique que sous cette condition la redirection se fera (un poil nuancé quoi).
__________________
Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]
RunCodePhp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/01/2011, 10h17   #5
Membre éprouvé
 
Avatar de radicaldreamer
 
Homme Guillaume
Développeur Web
Inscription : décembre 2007
Messages : 353
Détails du profil
Informations personnelles :
Nom : Homme Guillaume
Âge : 21
Localisation : France, Haut Rhin (Alsace)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : décembre 2007
Messages : 353
Points : 473
Points : 473
Merci pour:

Code :
1
2
3
header('HTTP/1.1 303 See Other');
header('Location: '.$url);
exit();
A part ça, ça ne règle pas mon problème. J'ai rajouté exit(). J'ai bien mi session_start() avant le ob_start() et ça ne fonctionne quand même pas :/
__________________
Si ce que tu as à dire n'est pas plus beau que le silence, alors tais toi.

- Pensez à voter pour les messages qui vous ont été utiles ainsi que de mettre
radicaldreamer est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/01/2011, 10h20   #6
Expert Confirmé
 
Avatar de RunCodePhp
 
Inscription : janvier 2010
Messages : 2 705
Détails du profil
Informations personnelles :
Localisation : Réunion

Informations forums :
Inscription : janvier 2010
Messages : 2 705
Points : 3 273
Points : 3 273
Citation:
que j'ai changé mon grain de sel pour éviter d'afficher le "vrai" en public
Si le grain de sel n'est pas le même, théoriquement une redirection s'opèrerait au niveau du header.php qui devrait faire retourner à nouveau vers le login.php.

Donc au final on ne parvient jamais à afficher cette page index.php
Du coup je ne vois pas comment as tu fais tes essai pour remarquer ça.

N'oubli pas de mettre des points d'arrêt avant les header() de redirection, faire afficher certaines données clé pour vérifier ça.
Puis suffit de simuler une redirection en tapant l'URL après avoir vérifier.

Dans ton cas, faire afficher l'Id de session avant la redirection puis après (après simulation), voir son contenu est essentiel.
S'i l'Id de session n'est pas le même (ce qui doit l'être) sera une info importante.

Bref ... faire ça aussi (point d'arrêts) dans chaque condition pour savoir dans laquelle on entre.
Je t'assure qu'on parvient assez vite de savoir qu'est ce qui ne va pas.
Enfin, en général, à part rare cas particuliers.
__________________
Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]
RunCodePhp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/01/2011, 10h27   #7
Membre éprouvé
 
Avatar de radicaldreamer
 
Homme Guillaume
Développeur Web
Inscription : décembre 2007
Messages : 353
Détails du profil
Informations personnelles :
Nom : Homme Guillaume
Âge : 21
Localisation : France, Haut Rhin (Alsace)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : décembre 2007
Messages : 353
Points : 473
Points : 473
Merci RunCodePhp mais le grain de sel est le même. Je le sais. Je l'ai juste changé de mon post sur le forum. Je ne voulais juste pas afficher le vrai.

Ensuite, je fais bien mes tests: je commente mes headers et je fait un echo. Donc je sais toujours ou va mon script et ce qu'il fait. Je sais donc que ma session est créée:

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
 
      if(($infos = $requete->fetch()) !== false){
        //on défini les variables de session.
        session_regenerate_id();
        $_SESSION['token'] = md5('eco-poules.com'.$_SERVER['HTTP_USER_AGENT']);//pour eviter la fixation de session ou le détournement
        $_SESSION['id_utilisateur'] = $infos['id_utilisateur'];
        $_SESSION['email_utilisateur'] = $infos['email_utilisateur'];
        $_SESSION['pseudo_utilisateur'] = $infos['pseudo_utilisateur'];
        var_dump($_SESSION);
        //header('HTTP/1.1 303 See Other');
        //header('location: ./index.php');//on redirige l'utilisateur sur la page d'accueil de l'administration
        exit();
      }else{...
Citation:
array(4) { ["token"]=> string(32) "aafea6962045127b6dcffcb84ce548ba" ["id_utilisateur"]=> string(1) "1" ["email_utilisateur"]=> string(19) "unemail@test.com" ["pseudo_utilisateur"]=> string(4) "Test" }
Avant la redirection. Je suppose donc que c'est dans le header.php que ça merde. Ou alors une configuration foutrait le bordel? Mais laquelle?

Le header après ouverture de la session: session vide. Pourquoi? :/
__________________
Si ce que tu as à dire n'est pas plus beau que le silence, alors tais toi.

- Pensez à voter pour les messages qui vous ont été utiles ainsi que de mettre
radicaldreamer est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/01/2011, 10h49   #8
Expert Confirmé
 
Avatar de RunCodePhp
 
Inscription : janvier 2010
Messages : 2 705
Détails du profil
Informations personnelles :
Localisation : Réunion

Informations forums :
Inscription : janvier 2010
Messages : 2 705
Points : 3 273
Points : 3 273
Citation:
Le header après ouverture de la session: session vide. Pourquoi? :/
Dans tes codes avant il y avait un ob_start().
Du coup, à quel moment les flux ne sont plus stockés en mémoires ? à quel moment ils sont renvoyés en sortis ?

J'ai idée qu'il y aurait un piège avec ce ob_start().
Mets un ob_end_flush() juste avant le var_dump, sait on jamais.

Puis affiche l'ID de session avec echo session_id(), donc juste après le var_dump.
Ensuite, une fois taper index.php dans la barre d'adresse, il faudrait là aussi afficher cet ID de session, comme dans le header.php :
Code :
1
2
3
4
5
6
7
 
session_start()
 
echo 'session id : '.session_id().'<br />';
print_r($_SESSION);
 
exit();
Faire ceci le plus tôt possible (pour éviter on ne sais quel autre piège)
Déjà ça, qu'est ce que tu obtiens ?
Les Ids de session sont les mêmes ou pas ?
__________________
Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]
RunCodePhp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/01/2011, 10h58   #9
Membre éprouvé
 
Avatar de radicaldreamer
 
Homme Guillaume
Développeur Web
Inscription : décembre 2007
Messages : 353
Détails du profil
Informations personnelles :
Nom : Homme Guillaume
Âge : 21
Localisation : France, Haut Rhin (Alsace)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : décembre 2007
Messages : 353
Points : 473
Points : 473
Les identifiants de session ne sont pas les mêmes!

login.php: 5310qpec0kgrknhalkl31jn7c4
index.php: 2t8nqgd7tminc6l511lnnraiv4

Mais pourquoi il me re-créé une session?! Baaah, ça m'énerve!
__________________
Si ce que tu as à dire n'est pas plus beau que le silence, alors tais toi.

- Pensez à voter pour les messages qui vous ont été utiles ainsi que de mettre
radicaldreamer est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/01/2011, 11h04   #10
Expert Confirmé
 
Avatar de RunCodePhp
 
Inscription : janvier 2010
Messages : 2 705
Détails du profil
Informations personnelles :
Localisation : Réunion

Informations forums :
Inscription : janvier 2010
Messages : 2 705
Points : 3 273
Points : 3 273
Citation:
Mais pourquoi il me re-créé une session?! Baaah, ça m'énerve!
Moi je dis que c'est déjà très bien, maintenant on connait le problème.

Comment sont gérés tes sessions ?
par défaut dans des fichiers je suppose ? ils sont stockés où ?
Les mettre dans ton propre répertoire serait mieux, si ça n'est pas le cas (session.save_path pour pour indiquer à Php le répertoire en question)

Puis surtout, tout ça est il fait en local ou sur un hébergeur ?

Aussi, regarde dans ton navigateur le cookie de session, et particulièrement le chemin (le path), dès fois que.
Est ce qu'il y a un cookie au moins correspondant à ton domaine ?

Peut être faudrait il redéfinir explicitement le cookie de session avec la fonction session_set_cookie_params(), à savoir.
__________________
Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]
RunCodePhp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/01/2011, 11h07   #11
Membre éprouvé
 
Avatar de radicaldreamer
 
Homme Guillaume
Développeur Web
Inscription : décembre 2007
Messages : 353
Détails du profil
Informations personnelles :
Nom : Homme Guillaume
Âge : 21
Localisation : France, Haut Rhin (Alsace)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : décembre 2007
Messages : 353
Points : 473
Points : 473
Effectivement, j'ai oublié de précisé: En local ça fonctionne plus (ça fonctionnait avant [avant = je ne sais pas depuis quelle opération]) et en prod ça fonctionne.

Ensuite, les sessions sont stockées dans le dossier par défaut et créées directement via les fichiers php.
__________________
Si ce que tu as à dire n'est pas plus beau que le silence, alors tais toi.

- Pensez à voter pour les messages qui vous ont été utiles ainsi que de mettre
radicaldreamer est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/01/2011, 11h13   #12
Expert Confirmé
 
Avatar de RunCodePhp
 
Inscription : janvier 2010
Messages : 2 705
Détails du profil
Informations personnelles :
Localisation : Réunion

Informations forums :
Inscription : janvier 2010
Messages : 2 705
Points : 3 273
Points : 3 273
Citation:
En local ça fonctionne plus (ça fonctionnait avant
Ca devrait être une histoire de domaine, de path coté cookie/session à mon sens.

Essai de récolter des infos dans ce sens (navigateur, puis les fonctions de php genre session_get_cookie_params).

Post les au besoin
__________________
Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]
RunCodePhp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/01/2011, 11h13   #13
Membre éprouvé
 
Avatar de radicaldreamer
 
Homme Guillaume
Développeur Web
Inscription : décembre 2007
Messages : 353
Détails du profil
Informations personnelles :
Nom : Homme Guillaume
Âge : 21
Localisation : France, Haut Rhin (Alsace)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : décembre 2007
Messages : 353
Points : 473
Points : 473
J'ai vérifié dans mon dossier par defaut:

Je supprime toutes les sessions. Je lance login.php il génère une session. Je valide le formulaire il génère une session avec session_regenerate_id() il me re-recréé une session...

Fiou, je ne vois pas pourquoi il en créé autant... :/
__________________
Si ce que tu as à dire n'est pas plus beau que le silence, alors tais toi.

- Pensez à voter pour les messages qui vous ont été utiles ainsi que de mettre
radicaldreamer est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/01/2011, 11h24   #14
Membre éprouvé
 
Avatar de radicaldreamer
 
Homme Guillaume
Développeur Web
Inscription : décembre 2007
Messages : 353
Détails du profil
Informations personnelles :
Nom : Homme Guillaume
Âge : 21
Localisation : France, Haut Rhin (Alsace)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : décembre 2007
Messages : 353
Points : 473
Points : 473
Bonne nouvelle, je sais d'ou ça vient.

Mauvaise: c'est que je sais pas pourquoi car je n'ai pas indiqué de directive:

nom / valeur / valeur defaut
Code :
session.cookie_domain	 ".eco-poules.com" "no value"
Je n'indique nulle part cette directive et par défaut elle devrait être à no value. J'avais déjà ouvert un topic à ce sujet. (ici)

J'avais donc supprimé une ligne de mon HTACCESS. Mais, cette ligne n'y ai pas là... Je pige pas pourquoi ça continue de me le faire. :/
__________________
Si ce que tu as à dire n'est pas plus beau que le silence, alors tais toi.

- Pensez à voter pour les messages qui vous ont été utiles ainsi que de mettre
radicaldreamer est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/01/2011, 11h26   #15
Membre éprouvé
 
Avatar de radicaldreamer
 
Homme Guillaume
Développeur Web
Inscription : décembre 2007
Messages : 353
Détails du profil
Informations personnelles :
Nom : Homme Guillaume
Âge : 21
Localisation : France, Haut Rhin (Alsace)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : décembre 2007
Messages : 353
Points : 473
Points : 473
Putain (pardonnez moi l'injure) mais j'ai vraiment un hébergeur à la con. Il modifie mon htaccess en m'y ajoutant la value n'importe ou. Elle était planqué dans mon htaccess...

Problème résolu. Merci encore de ton aide RunCodePhp. C'est très appréciable une réactivité pareil. Bonne journée
__________________
Si ce que tu as à dire n'est pas plus beau que le silence, alors tais toi.

- Pensez à voter pour les messages qui vous ont été utiles ainsi que de mettre
radicaldreamer est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 18h40.


 
 
 
 
Partenaires

Hébergement Web