[résolu] session_start()

session_start() [résolu] - PHP - Programmation

Marsh Posté le 28-06-2006 à 21:44:26    

Bonsoir,
 
Je viens de créer une zone membres.
Lorsque l'internaute s'y connecte avec les données correctes, il tombe sur une page d'erreur :
 
Warning: session_start(): Cannot send session cookie - headers already sent by (output started at /home/www/210749426b69527e61e114f8cf14a606/web/menu.php:38) in /home/www/210749426b69527e61e114f8cf14a606/web/Private/accueil.php on line 29
 
Mon code est le suivant, pouvez vous m'expliquer ce qui est anormal dans celui ci ? merci :
 

Code :
  1. <?php
  2. $pseudo = $_POST['pseudo'];
  3. $mdp = $_POST['mdp'];
  4. $db = mysql_connect('localhost', ***, ***); 
  5. mysql_select_db('users',$db);                   
  6. $req = mysql_query('SELECT mdp FROM users');           
  7. if($pseudo=='' || $mdp=='')
  8.     {
  9.     echo '<p>Vous avez oublié de remplir un champ.</p>';
  10.     exit;
  11.     }
  12. // on recupère le password de la table qui correspond au login du visiteur  
  13. $sql = "SELECT mdp FROM users WHERE pseudo='$pseudo'";
  14. $req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
  15. $data = mysql_fetch_array($req);
  16. if($data['mdp'] != $mdp)
  17.     {
  18.     echo '<p>Mauvais login et/ou mot de passe. Merci de recommencer</p>';
  19.     exit;
  20.     }
  21. else
  22.     {
  23.     session_start();
  24.     session_register('pseudo');
  25.    
  26.     echo '<p align="center"><font face="verdana" size="2"><b>Vous êtes logué en tant que </b></font></p>'.$_SESSION['pseudo'];
  27.     // ici vous pouvez afficher un lien pour renvoyer   
  28.     // vers la page d'acueil de votre espace membres  
  29.     }
  30. mysql_close($db); 
  31. ?>


Message édité par oli1987 le 01-07-2006 à 10:42:15
Reply

Marsh Posté le 28-06-2006 à 21:44:26   

Reply

Marsh Posté le 28-06-2006 à 22:38:45    

Je vais encore être désagréable, mais le manuel est pas là pour faire joli, on trouve aussi des réponses dedans.
 
Par exemple, celui de session_start() nous dit

Citation :

Note :  Si vous utilisez des sessions basées sur les cookies, vous devez appeler session_start() avant d'afficher quoi que ce soit au navigateur.


 
Ce qui, vu que la page mise en cause par le message d'erreur n'est pas celle où se produit le message d'erreur me fait penser que tu fais un include de ta page dans une page qui elle affiche déjà quelque chose à l'écran.
 
J'ai bon ?

Reply

Marsh Posté le 28-06-2006 à 23:18:56    

oui c'est ca
 
de toute facon le  
 
else
   {
   session_start();
   session_register('pseudo');  
 
ne sert strictement à rien puisque session_start() doit être lancé avant n'importe quelle sortie navigateur.
donc tout en haut de ta page, et cela sur TOUTES tes pages.
 
++

Reply

Marsh Posté le 29-06-2006 à 00:24:18    

juste, autant pour moi.
Merci de ce rappel ;)

Reply

Marsh Posté le 29-06-2006 à 00:58:29    

j'ai besoin d'un conseil.
une fois la session démarrée, est ce que c'est tout aussi utile et sécurisé d'utiliser le code suivant pour déterminer si l'internaute est bien logué ???
 

Code :
  1. <?php
  2. if ($_SESSION['pseudo'] == ''){
  3. echo 'Vous n\'êtes pas logué';
  4. }
  5. else
  6. {
  7. echo 'salut '.$_SESSION['pseudo'];
  8. }
  9. ?>

Reply

Marsh Posté le 29-06-2006 à 01:06:05    

Pas sécurisé à mon gout!

Reply

Marsh Posté le 29-06-2006 à 11:00:32    

pourquoi ? qu'est ce qui est plus approprié ? les cookies ?

Reply

Marsh Posté le 29-06-2006 à 12:35:02    

oli1987 a écrit :


Code :
  1. <?php
  2. if ($_SESSION['pseudo'] == ''){
  3. echo 'Vous n\'êtes pas logué';



 
Si ton $_SESSION['pseudo'] est nul alors il n'est pas loggué. ok. Donc d'apres ton code si $_SESSION['pseudo'] est autre que nul, on est loggué.
Donc si on peut faire passer 'toto' (ou nimporte quel autre chose tant qu'il est != de null) à $_SESSION['pseudo'], alors toto aura access a ton else qui contient surement la zone membre...

Reply

Marsh Posté le 29-06-2006 à 12:39:05    

comment tu vas faire passer toto si le formulaire se situe deux pages avant ???

Reply

Marsh Posté le 29-06-2006 à 13:07:44    

Je connais pas ton code entier.. en regardant la source tu vois ce qui est passé en parametre de ton fichier php qui recevra ton formulaire. Je ne dis pas que c'est facile.
Et encore moins faisable car je ne connais pas ton code :p

Reply

Marsh Posté le 29-06-2006 à 13:07:44   

Reply

Marsh Posté le 01-07-2006 à 08:43:51    

ob_start

Reply

Sujets relatifs:

Leave a Replay

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