logo Homepage
Pages: [1]
  Imprimer  
Auteur Fil de discussion: [PHP] session_start(): Cannot send session cache limiter ....  (Lu 8111 fois)
micka13
Profil challenge

Classement : 3474/55019

Membre Junior
**
Hors ligne Hors ligne
Messages: 86


Voir le profil
« le: 22 Mars 2008 à 21:14:58 »

Bonjour , alors j'ai chercher sur notre ami google , mais au bout de 3 pages j'ai toujours la meme reponse :
il ne faut pas de code html avant session_start(); .Le probleme c'est que je ne met rien avant ca !
Voila mon login.php
Code:
<?php

mysql_connect("localhost","root","");
mysql_select_db("site") or die ("erreur");

session_start();
if(!isset($_SESSION['visiteur']))
{

$_SESSION['visiteur'] = 1;

}
 if(isset($_POST['login'])&& isset($_POST['pass'])&& $_POST['login']!=null && $_POST['pass']!=null)
{
$pass mysql_real_escape_string(htmlspecialchars($_POST['pass']));
$login mysql_real_escape_string(htmlspecialchars($_POST['login']));
$resultat=mysql_query("SELECT * FROM membre where login='$login' ") or die(mysql_error());
$donnees=mysql_fetch_array($resultat);

if($donnees['pass']!=$pass)
echo "Mauvais login-password";
else
{
$_SESSION['visiteur'] =0;
$_SESSION['login'] = $login;

$_SESSION['pass'] = $pass;

$_SESSION['admin'] = $donnees['admin'];

 header("location:a.php") ;

}
}
else if($_SESSION['visiteur']==1)
{
echo '<form name="identification" action="a.php" method="post">
login : <input type="text" name="login" maxlength="25" size="25"><br>
pass : <input type="password" name="pass" size="20" maxlength="20"><br>
<input type="submit" value="S\'identifier">
</form>dezd'
;
}

else 
{

echo 'bienvenue '.$_SESSION['login'];
echo'<br><a href="deco.php">deconnection</a>';

}

?>
deco.php
Code:
<?php
session_start
();
  
session_unset() ;
session_destroy();


 
header("location:login.php") ;
?>

Lorsque je test directement login.php , le formulaire marche tres bien : si je rentre un mauvais pass , ca me connecte pas , si j'en rentre un bon , ca me marque bienvenue micka et un lien vers deco.php.Si je clique sur deco , ca me deco et je retourne sur login avec le formulaire.
Maintenant dans j'inclue login.php dans xhtml.php :
Code:
<?php
session_start
();
?>


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" >
   <head>
       <title>Mon super site</title>
       <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
   <link rel="stylesheet" media="screen" type="text/css" title="Exemple" href="css.css" />
   </head>
 
   <body>
 
       <!-- L'en-tête -->
 
       <div id="en_tete">
           
       </div>
 
       <!-- Les menus -->
 
       <div id="menu">       
           <div class="element_menu">
<?php include("login.php");?>
           </div>
       
           <div class="element_menu">
               <h3>Titre menu</h3>
               <ul>
                   <li><a href="page4.html">Lien</a></li>
                   <li><a href="page5.html">Lien</a></li>
                   <li><a href="page6.html">Lien</a></li>
               </ul>
           </div>       
       </div>
 
       <!-- Le corps -->
 
       <div id="corps">
  <? include("news.php"); ?>
       </div>
 
       <!-- Le pied de page -->
 
       <div id="pied_de_page">
           <p>aaaaaaa</p>
       </div>
 
   </body>
</html>
Si je rajoute session_start() en haut de xhtml.php et que je l'enleve de login , j'ai aucun message d'erreur , mais mon login ne marche plus , le formulaire se reafichant a chaque fois.Si je laisse le session_start dans login et que je rajoute dans xhtml j'ai :
Citation
Notice: A session had already been started - ignoring session_start() in c:\program files\easyphp1-8\www\test\login.php on line 5.
Normal puisque il y a deja un session_start  , par contre le login fonctionne!
Alors comment puis je faire ,pour ne pas avoir le message et que ca marche?


[edit] pour que le message ne s'affiche plus , j'ai mis un @ devan le session_start() du login.php ...
Mais malgres tout je ne comprend pas l'erreur , si quelqu'un peux m'eclairer ca serait gentil
« Dernière édition: 09 Mars 2009 à 16:09:55 par the lsd » Journalisée
micka13
Profil challenge

Classement : 3474/55019

Membre Junior
**
Hors ligne Hors ligne
Messages: 86


Voir le profil
« #1 le: 23 Mars 2008 à 11:20:46 »

La nuit porte conseil , aussi je pense avoir trouvé l'explication :
lorsque j'appuis sur "S'identifier" , la requete vas vers login.php , or si  je  met session_start() que dans xhtml.php, ca ne fonctionnera pas ,puisqu' il ne se trouve pas dans login.php !
Je pense que je vais laisser ainsi avec le @ , car je ne vois pas d'autre solution .
Journalisée
White Angels
Profil challenge

Classement : 16400/55019

Néophyte
*
Hors ligne Hors ligne
Messages: 5


Voir le profil
« #2 le: 19 Juillet 2008 à 10:14:07 »

session_start(); ce place avant tout code php ou html.

Ensuite si tu es sur free il y a de forte chance qu'il faille créer un dossier nomé "session" à la racine de ton ftp.

Coordialement
Journalisée
BiDOrD

Profil challenge

Classement : 73/55019

Néophyte
*
Hors ligne Hors ligne
Messages: 39


Voir le profil
« #3 le: 19 Juillet 2008 à 14:19:24 »

session_start(); ce place avant tout code php ou html.
Ou pas...
session_start() ne se place pas "avant tout code php" de manière bêta et systématique. Il se place avant tout envoi de contenu au client. (C'est à dire un echo/print/print_r ou du contenu hors des balises <?php ?>).
Et c'est valable aussi pour header(), setcookie().
Ce genre de raccourci met la confusion dans l'esprit des gens, ce topic en est la preuve...

micka13, pour ton problème. Le fonctionnement même de ton site n'est pas top je trouve. En effet si j'ai bien compris, login.php te sert tantôt inclue dans une page, tantôt appelée directement...
Et cela explique tous tes soucis :
Quand tu l'inclus dans xhtml.php, login.php ne peut plus ouvrir de session car lorsque login.php est appelé, du code xhtml a déjà été envoyé au client par xhtml.php. Pour résoudre cela tu as d'abord déplacé le session_start dans xhtml.php. Mais comme d'après ce que tu dis, le formulaire dirige sur login.php directement, celle-ci est parfois appelée directement par le client. Il faut donc que login.php possède aussi un session_start() pour quand elle est toute seule ! Qu'à cela ne tienne, tu as donc mis un session_start() sur les 2... Mais si on revient dans la première situation, avec l'inclusion, on se retrouve avec un 2ème session_start() au milieu.

Donc pour moi, la meilleure solution serait de revoir tout ton système, en t'arangeant pour que soit login.php soit une page toujours appelée directement ou toujours incluse.

Sinon, une autre méthode qui resterait "propre" (plus que l'ajout du @ du moins ) : tu met ton session_start() dans une page session.php et tu mets :
Code:
include_once 'session.php';
au début de tes 2 pages.

Salut.
Journalisée
Pages: [1]
  Imprimer  
 
Aller à: