Problème session

Problème session - PHP - Programmation

Marsh Posté le 06-04-2009 à 18:01:20    

Bonjour,
 
J'ai un petit problème avec les variables enregistrées dans une session, que ce soit chez sfr ou sur xampp. Je m'explique:  
 

Code permettant la connexion:

 
<?
$db = mysql_connect('localhost', '****, '******');
mysql_select_db('test',$db);  
 
if(isset($_POST) && !empty($_POST['login']) && !empty($_POST['pass'])) {
  extract($_POST);
 
  $sql = "select pwd from tbl_user where login='".$login."'";
  $req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
 
  $data = mysql_fetch_assoc($req);
 
  if($data['pwd'] != $pass) {
    echo '<p>Mauvais login / password. Merci de recommencer</p>';
    include('login.htm');  
    exit;
  }
  else {
    session_start();
    $_SESSION['login'] = $login;
     
    echo 'Vous etes bien logué';
 echo "$login";
  }    
}
else {
  echo '<p>Vous avez oublié de remplir un champ.</p>';
   include('login.htm');
   exit;
}
 
 
?>

 

 
Code de la page réservée aux connectés:

 
<?
session_start();
if(!isset($_SESSION['login'])) {
  echo 'Merci de vous connecter.';
  include('login.htm');
}
else
{
echo "Bonjour $login !";    <  ----------------------- le problème se situe là
}
?>

 
Voilà. Donc sur la page réservée aux connectés, lorsque quelqu'un est connecté son pseudo ne s'affiche pas (lorsque j'étais chez un autre hébergeur ça fonctionnait). J'aimerai savoir comment résoudre ce problème, sans avoir à mettre echo "$_SESSION[login]";

Reply

Marsh Posté le 06-04-2009 à 18:01:20   

Reply

Marsh Posté le 06-04-2009 à 18:07:43    

Bon.
Ton code est une catastrophe en terme de sécurité et de performances.
D'abord, pour répondre à ta question. Le problème que tu rencontres vient de register_globals qui est désactivé. Lis ceci et tu sauras quoi faire :
http://fr.php.net/manual/fr/security.globals.php
 
Ensuite, si tu as pris la peine de lire le lien précédent, tu comprendras qu'il ne faut pas utiliser extract pour des données GET, POST, COOKIE ou SESSION parce que cela simule le comportement de register_global.
 
Autre chose : tu ne sécurises pas tes variables avant de les utiliser dans une requête, ton site est vulnérable aux injections SQL (faire une recherche google pour en savoir plus).
Utiliser mysql_real_escape_string pour échapper tes données (voir la doc de php, php.net).
 
Enfin, un problème de quotes :

Code :
  1. echo "$login"; // est inutile
  2. echo $login; // est mieux
  3.  
  4. echo "bla bla " . $var . " bla bla"; // est inutile
  5. echo "bla bla $var bla bla"; // est mieux

Reply

Marsh Posté le 07-04-2009 à 09:44:45    


 
Ok merci :) Donc apparement il est déconseillé d'activer register_globals?


Message édité par willy54 le 07-04-2009 à 09:46:06
Reply

Marsh Posté le 07-04-2009 à 10:05:17    


 
je suis pas forcement d'accord, car ca devient tres vite illisible (apres ca depend des cas)

Reply

Marsh Posté le 07-04-2009 à 10:08:08    

oui très, pour des raisons de sécurité et pour d'autres raisons encore (voir cette page http://forum.hardware.fr/hfr/Progr [...] m#t1849860 )
 
Autre chose : tu n'as qu'un user dans ta table tbl_user ? (je te demande car tu ne vérifies que le premier utilisateur sorti par le SELECT)

Reply

Marsh Posté le 07-04-2009 à 10:35:42    


 
Non plusieurs.

Reply

Marsh Posté le 07-04-2009 à 10:38:53    

ah oui ok pardon.
Mais tu peux faire çà directement :

Code :
  1. SELECT * FROM tbl_users WHERE login = '$login' AND pass = '$pass'


Et ensuite tu regardes avec mysql_num_rows si tout est ok ;)

Reply

Marsh Posté le 07-04-2009 à 10:52:06    


 
Merci bien :)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed