Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1512 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  problème avec une variable de session

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

problème avec une variable de session

n°1685216
merlu20
Posté le 12-02-2008 à 11:06:52  profilanswer
 

Salut à tous ! Je développe un site (dans le cadre d'un projet fictif) de vente en ligne de meubles de salon d'intérieur. Sur ce site, j'ai un formulaire de connexion où l'utilisateur doit saisir son email et son mot de passe pour se connecter. Je récupère l'email dans une variable de session, mais le problème c'est que, chaque fois que je recharge la page index.php, ça détruit ma variable de session sans que je sache pourquoi ... Et quand je mets en commentaires tout le fichier de déconnexion, il garde ma variable de session ...
 
Voici le code de mon fichier de connexion (le session_start se trouve dans index.php)
 

Code :
  1. <?php
  2.    class plugin_connexion implements IPlugin {
  3.                        
  4.    function render (&$html, $args){
  5.       //$buffer = "";
  6.       if(!isset($_SESSION['session_mail']) || empty($_SESSION['session_mail'])){
  7.          $buffer = "<form name='connexion' method='post' >" .
  8.          "<br><br>" .
  9.          "adresse email : <input type='text' name='mail'><br><br>" .
  10.          "mot de passe : <input type='password' name='passwd'><br><br>" .
  11.          "<input type='submit' value='Connexion client'/><br />" .
  12.          "<br><br>" .
  13.          "<b>Administrateur</b>" .
  14.          "<input type='password' name='tpassadmin'><br><br>" .
  15.          "<input type='submit' value='Connexion admin'><br />" .
  16.          "</form>";
  17.                        
  18.                
  19.          if(isset($_POST['mail']) && (isset($_POST['passwd']))){  //les informations ont été envoyées
  20.              //echo "Les informations ont été envoyées";
  21.              $mail = $_POST['mail']; //parsing du mail
  22.              $passwd = $_POST['passwd']; //parsing du mot de passe
  23.                                
  24.              $_SESSION['session_mail'] = $mail;
  25.              $_SESSION['password'] = $passwd;
  26.                                        
  27.              if((strlen($mail) != 0) && (strlen($passwd) != 0)){
  28.                  $sql = "SELECT * FROM client WHERE MailClient = '".$mail."' and PasswordClient =                      '".$passwd."'";
  29.                  $req = $GLOBALS['dbal']->query($sql);
  30.                  if($GLOBALS['dbal']->num_rows($req)) { //s'il existe des résultats à la requête
  31.                       //session_start();
  32.                       $email = $_SESSION['session_mail'];
  33.                       $password = $_SESSION['password'];
  34.                                                
  35.                       //On récupère le numéro du client au cas où celui-ci effectuerait une commande
  36.                       $sql2 = "SELECT NoClient FROM client WHERE MailClient = '".$email."' and PasswordClient = '".$password."'";
  37.                       $req2 = $GLOBALS['dbal']->query($sql2);
  38.                       if($req2) {
  39.                            //echo "je rentre dans le if";
  40.                            $ligne = $GLOBALS['dbal']->fetch_assoc($req2);
  41.                            //echo "$ligne";
  42.                            $num_client = $ligne['NoClient'];
  43.                            //echo "$num_client";
  44.                            $_SESSION['noclient'] = $num_client;
  45.                            $nocli = $_SESSION['noclient'];
  46.                            //echo "$nocli";
  47.                        }
  48.                                                
  49.                        $buffer = "<br /><br /><br />Vous êtes correctement identifié.<br /><br />" .
  50.                        "<a href=index.php?id=6&mail='$email'>Cliquez ici pour modifier vos données.</a><br /><br />" .
  51.                        "<a href=index.php?id=13>Consultez l'historique de vos commandes</a><br><br>" .
  52.                        "<a href=index.php?id=8>Déconnexion</a><br /><br />";
  53.                  }
  54.                  else {
  55.                      $buffer = "Vous n'êtes pas encore inscrit<br /><br />";
  56.                      $buffer .= '<a href=index.php?page=0>Retour</a><be /><br />';
  57.                  }     
  58.             }
  59.             else {
  60.                $buffer = "Vous n'avez pas saisi votre mot de passe ou votre email.<br /><br />";
  61.               }
  62.           }
  63.        }
  64.        else {
  65.            $mail = $_SESSION['session_mail'];
  66.            $passwd = $_SESSION['password'];
  67.            $buffer = "<br /><br /><a href=index.php?id=6&mail='$mail'>Cliquez ici pour modifier vos données.</a><br /><br />";
  68.            $buffer .= "<a href=index.php?id=13>Consultez l'historique de vos commandes</a><br><br>";
  69.            $buffer .= "<a href=index.php?id=8>Déconnexion</a><br /><br />";
  70.         }
  71.                         return $buffer;
  72.      }         
  73.                                
  74.   }
  75. ?>


 
 
 
 
Et voici celui de la déconnexion :
 
 

Code :
  1. <?php
  2.         class plugin_deconnexion implements IPlugin{
  3.        
  4.                 function render(&$html, $args){
  5.                
  6.                         //session_unset();
  7.                         unset($_SESSION['password']);
  8.                         $buffer = "Vous vous êtes déconnectés avec succès <br /><br />" .
  9.                         "<a href=index.php?id=0>Retour à l'accueil</a><br /><br />";
  10.                         header("location index.php" );
  11.                                
  12.                         return $buffer;
  13.                        
  14.                 }
  15.         }
  16. ?>

mood
Publicité
Posté le 12-02-2008 à 11:06:52  profilanswer
 

n°1685248
FlorentG
Unité de Masse
Posté le 12-02-2008 à 11:41:14  profilanswer
 

Faut regarder plutôt du côté d'index.php si y'a pas quelque chose qui écrase.
 
La déconnexion est incomplète, il faut détruire la session avec session_destroy, et supprimer le cookie

n°1685324
merlu20
Posté le 12-02-2008 à 14:12:28  profilanswer
 

Voilà la partie de mon code "index.php" qui concerne les sessions :
 

Code :
  1. // On démarre une session (ou on reprend la session existante, s'il y en a une)
  2.   // Le session_start() doit s'effectuer _après_ l'inclusion de toutes les classes
  3.   // d'objets (donc après loadPlugins())
  4.   session_start();
  5.   if (!isset($_SESSION['thecart']))
  6.  $_SESSION['thecart'] = new plugin_cart();
  7.   if(!isset($_SESSION['theconnection']))
  8. $_SESSION['theconnection'] = new plugin_connexion();
  9.  
  10.   if(!isset($_SESSION['recherche']))
  11. $_SESSION['recherche'] = new plugin_recherche();


 
Sinon, quelle fonction doit-on utiliser pour supprimer un cookie ?

n°1685349
FlorentG
Unité de Masse
Posté le 12-02-2008 à 15:05:48  profilanswer
 

Ca peut être un problème de cookies aussi. S'ils sont mal initialisés, ça peut foirer

n°1685351
merlu20
Posté le 12-02-2008 à 15:07:41  profilanswer
 

Dans mon code, je ne parle pas du tout de cookies ;)

n°1685353
FlorentG
Unité de Masse
Posté le 12-02-2008 à 15:09:00  profilanswer
 

Ben si, si t'as des sessions [:dawa] L'identifiant est transmis par cookies

n°1685358
merlu20
Posté le 12-02-2008 à 15:17:15  profilanswer
 

Ah bah oui :) Comment faire dans ce cas pour voir si les cookies sont mal initialisés ?

n°1685362
FlorentG
Unité de Masse
Posté le 12-02-2008 à 15:19:44  profilanswer
 

Snif le trafic HTTP, et regarde ce qu'il se passe au niveau des entêtes Set-Cookie et Cookie

n°1685365
merlu20
Posté le 12-02-2008 à 15:26:48  profilanswer
 

Euh ... désolé mais là, tu me parles en chinois lol

n°1685467
merlu20
Posté le 12-02-2008 à 17:13:42  profilanswer
 

Peut-être est-ce dû à mes variables de session ... Car si on regarde bien, dans ma page "index.php", il y en a une qui s'appelle "theconnection" et que je remplace dans plugin_connexion par "session_mail". Le truc, c'est que quand je remplace "theconnection" par "session_mail" dans la page index.php, il me met l'erreur suivante :  
 
Catchable fatal error: Object of class plugin_connexion could not be converted to string in C:\wamp\www\projet_MS2006\plugins\connexion\plugin_connexion.php on line 70
 
Pensez-vous que ça ait un rapport ?

mood
Publicité
Posté le 12-02-2008 à 17:13:42  profilanswer
 

n°1685741
merlu20
Posté le 13-02-2008 à 11:21:05  profilanswer
 

Un petit coup de main svp :)

n°1686347
merlu20
Posté le 14-02-2008 à 14:40:02  profilanswer
 

Toujours personne ?

n°1688256
merlu20
Posté le 19-02-2008 à 11:31:17  profilanswer
 

J'ai toujours le souci ...

n°1688284
forzayalta
Posté le 19-02-2008 à 11:50:24  profilanswer
 

est-ce que la fonction "session_start()" est appellée au début du fichier "index.php"?

n°1688331
merlu20
Posté le 19-02-2008 à 12:52:30  profilanswer
 

Non, ce n'est pas au début.

n°1688338
merlu20
Posté le 19-02-2008 à 13:15:18  profilanswer
 

Voici mon code d'index.php
 

Code :
  1. <?php
  2. //session_start();
  3. // Intégrer le fichier de configuration
  4. // et la gestion des plugins
  5. include_once 'conf/config.php';
  6. include_once 'lib/plugins.php';
  7. include_once "lib/dbal.php";
  8. include_once "lib/util.php";
  9. //session_start();
  10.  
  11. $dbal = new dbal();
  12. // Equivalent à : $GLOBALS['dbal'] = new dbal();
  13.  
  14. // Récupérer le chemin des templates
  15. $chemin = $site['templateDir'];
  16.  
  17. // Lire le fichier HTML de maquette
  18. $html = file_get_contents($chemin . 'index.html');
  19.  
  20. // Remplacer le marqueur ###TEMPLATE_PATH### par le chemin du template par défaut
  21. $html = str_replace('###TEMPLATE_PATH###', $chemin, $html);
  22.  
  23. // Charger et exécuter les plugins
  24. loadPlugins();
  25.  
  26. // On démarre une session (ou on reprend la session existante, s'il y en a une)
  27. // Le session_start() doit s'effectuer _après_ l'inclusion de toutes les classes
  28. // d'objets (donc après loadPlugins())
  29. session_start();
  30. if (!isset($_SESSION['thecart']))
  31.  $_SESSION['thecart'] = new plugin_cart();
  32. if(!isset($_SESSION['theconnection']))
  33.  $_SESSION['theconnection'] = new plugin_connexion();
  34.  
  35. if(!isset($_SESSION['session_recherche']))
  36.  $_SESSION['session_recherche'] = new plugin_recherche();
  37. if(!isset($_SESSION['nom']))
  38.  $_SESSION['nom'] = new plugin_inscription();
  39. // Exécuter les actions relatives à la page
  40. // (traitements de GET ou POST notamment)
  41. execActions();
  42.  
  43. // Le plugin plugin_cart s'implante directement dans la page ici,
  44. // contrairement aux autres plugins qui sont générés automatiquement par
  45. // renderPlugins(), plus loin.
  46. // Sinon, renderPlugins() générerait un nouvel objet plugin_cart, vide par défaut,
  47. // au lieu de reprendre le panier plugin_cart de la session.
  48. $html = str_replace("###CART###", $_SESSION['thecart']->render($html, array()), $html);
  49.  
  50. // Déclencher le "rendu" des plugins de la page
  51. echo renderPlugins($html);
  52.  
  53. //session_destroy();
  54.  
  55. /**
  56. *  Traitements de la page
  57. **/ 
  58. function execActions() {
  59.  if (!isset($_GET['action']))
  60.   return;
  61.        
  62.  // Traiter l'action
  63.  switch($_GET['action']) {
  64.   case 'add':
  65.    if (isset($_GET['ref'])) {
  66.     // Retraiter la référence
  67.     $ref = addslashes(strtoupper($_GET['ref']));           
  68.     $_SESSION['thecart']->add($ref, 1);
  69.    }
  70.   break;
  71.      
  72.   case 'del':
  73.    if (isset($_GET['ref'])) {     
  74.     // Retraiter la référence
  75.     $ref = addslashes(strtoupper($_GET['ref']));         
  76.     $_SESSION['thecart']->remove($ref, 1);
  77.    }
  78.   break;
  79.        
  80.   case 'clear':
  81.    $_SESSION['thecart']->clear();
  82.  }
  83. }
  84. ?>

n°1688400
FlorentG
Unité de Masse
Posté le 19-02-2008 à 14:15:09  profilanswer
 

forzayalta a écrit :

est-ce que la fonction "session_start()" est appellée au début du fichier "index.php"?


Il aurait déjà vu une erreur "headers already sent" le cas échéant.
 
Moi quand j'avais ce genre de problèmes, c'était souvent les paramètres de cookies qui étaient pas bon. C'est pour ça qu'il faudrait sniffer le traffic HTTP pour voir ce qui est envoyé dans le header Set-Cookie. Suffit que le chemin ou le domaine soit pas bon, et ça foire tout

n°1689569
forzayalta
Posté le 20-02-2008 à 18:22:59  profilanswer
 

FlorentG a écrit :


Il aurait déjà vu une erreur "headers already sent" le cas échéant.


 
Pas forcément, tout dépend de la configuration du serveur, du niveau d'alerte de error_reporting().


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  problème avec une variable de session

 

Sujets relatifs
problème allocation tableau dynamiquecreer un "formulaire" avec lien variable
[Java Web Start]Problème de cache sur la méthode FileSystemManager.resproblème de boucle/session : envoi de doublons en nombre variable ?!
Probleme variable de session et requete sqlProblème de récupération de variable de session.
probleme avec une variable de session[ASP.NET] Problème pour accéder à une variable Session
probleme avec variable de session (sou oracle)[PHP] Probleme pour supprimer une variable de session
Plus de sujets relatifs à : problème avec une variable de session


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR