problème avec mes sessions

problème avec mes sessions - PHP - Programmation

Marsh Posté le 21-02-2003 à 10:51:55    

Bonjour :)
 
J'ai un problème avec mes sessions.
De temps en temps mon navigateur m'affiche l'erreur :
Warning:cannot add header informations.........
 
Pourtant je n'ai qu'un header, il est sur la première page, c'est pour faire un redirection.
 
Dans mes autres pages mes session_start() sont avant mes balises HTML, donc je ne comprends vraiment pas ce qui peux ce passer, en plus ça ne le fait pas à chaque fois, mais de temps et temps, je me demande si mon navigateur ne déconne pas aussi de temps à autre....
 
Voilà mon code si ça peux vous aider:

Code :
  1. <?php
  2. //startSession.class.php:
  3. include( "./include/fonctions.inc.php" ) ;
  4. //début de la classe startSession:
  5. class startSession
  6. {
  7. //identifiant de session:
  8. var $idSession ;
  9. //login de l'utilisateur:
  10. var $login ;
  11. //url:  
  12. var $urlPage ;
  13. //nom de la connection au serveur:
  14. var $cnx ;
  15. //constructeur:
  16. function startSession( $SERVEUR, $USER, $PASS, $DB, $urlPage)
  17. {
  18.  if( session_start() )
  19.   echo( "<br><center>session started.</center>" ) ;
  20.  $this->cnx = connect( $SERVEUR, $USER, $PASS, $DB );
  21.  $this->idSession = session_id() ;
  22.  $this->urlPage  = $urlPage ;
  23. }
  24. //on vérifie que le login et le mot de passe sont corrects:
  25. function checkUser( $login )
  26. {
  27. $sql     = "SELECT *
  28.   FROM user
  29.   WHERE login_user = '$login' " ;
  30. $requete = execReq( $sql, $this->cnx ) ;
  31. $result  = mysql_fetch_object( $requete ) ;
  32. return $result ;
  33. }
  34. //on vérifie que l'utilisateur n'a pas déjà une session en cours:
  35. function checkSession()
  36. {
  37. $sql     = "SELECT *
  38.      FROM session
  39.      WHERE id_session = '$this->idSession' " ;
  40. $requete = execReq( $sql, $this->cnx ) ;
  41. $result  = mysql_fetch_object( $requete ) ;
  42. return $result ;
  43. }
  44. //on vérifie que la session et toujours valide:
  45. function checkSessionValidity()
  46. {
  47. //on vérifie que le temps limite n'est pas dépassé:
  48. $sql     = "SELECT heure
  49.  FROM `session`
  50.  WHERE id_session = '$this->idSession' " ;
  51.    
  52. $requete = execReq( $sql, $this->cnx ) ;
  53. if( $result = mysql_fetch_object( $requete ) )
  54. $heure = $result->heure ;
  55. if( $now > $heure+60 )
  56. {
  57. //on supprime la session:
  58. session_destroy() ;
  59. //on supprime les données de la base de données
  60. $sql     = "DELETE
  61.      FROM session
  62.      WHERE id_session = '$this->idSession' " ;
  63. $requete = execReq( $sql, $this->cnx) ;
  64. if( $requete )
  65. echo( "<br><center>suppression de la session.</center>" ) ;
  66. return FALSE ;
  67. }
  68. else
  69. {
  70. return TRUE ;
  71. }
  72. }
  73. //on crée une session :
  74. function creeSession( $login, $pass )
  75. {
  76. $user = $this->checkUser( $login )  ;
  77. //on vérifie si l'utilisateur existe:
  78. if( is_object( $user ) )
  79. {
  80. //il existe, on vérifie alors si son mot de passe est correct:
  81. if( $user->pass_user == $pass )
  82. {
  83. //si tout est bon, on insère les données dans la table session:
  84. $now = date( "U" ) ;
  85. $sql    = "INSERT INTO session(id_session, session_login, heure VALUES('$this->idSession', '$login', '$now') " ;
  86.       
  87. $result = execReq( $sql, $this->cnx ) ;
  88. $nomSession = $this->enregistre( $login ) ;
  89. return TRUE ;
  90. }
  91. //si le mot de passe est incorrect on affiche un message d'erreur:
  92. else
  93. {
  94. return FALSE ;
  95. }
  96. }
  97. //l'utilisateur n'existe pas:
  98. else
  99. {
  100. echo( "<br><center>Désolé ".$login." mais vous n'existez pas. Vous n'avez pas le droit d'utiliser le créaRub</center>" ) ;
  101.     return FALSE ;
  102. }
  103. }
  104. //on contrôle l'accès des utilisateurs:
  105. function checkAccess( $login, $pass )
  106. {
  107. echo( "<br><center>checkAccess:LANCEE, login: $login, pass: $pass</center>" ) ;
  108. //on regarde s'il y a une session en cours:
  109. $currentSession = $this->checkSession() ;
  110. //cas 1: on vérifie la session en cours:
  111. //si il y a une session en cours:
  112. if( is_object( $currentSession ) )
  113. {
  114. //on vérifie si cette session est encore valide:
  115. if( $this->checkSessionValidity( $currentSession ) )
  116. {
  117. //on garde l'email de l'utilisateur:
  118. $this->login = $currentSession->login_user ;
  119. $access = TRUE ;
  120. return $access ;
  121. }
  122. else
  123. {
  124. echo( "<br><center>Votre session n'est plus valide veuillez cliquer <a href='index.php' target='_blank'>ici</a> pour vous reloguer.</center>" ) ;
  125. $access = FALSE ;
  126. return $access ;
  127. }
  128. }
  129. //cas 2: il n'y a pas de session, mais l'utilisateur existe:
  130. if( ( isset( $login ) ) && ($access == FALSE ) )
  131. {
  132. if( $this->creeSession( $login, $pass ) )
  133. {
  134. //on garde l'email de l'utilisateur:
  135. $this->login = $login ;
  136. $access = TRUE ;
  137. return $access ;
  138. }
  139. else
  140. {
  141. echo( "<br><center>L'identification à échouée</center>
  142.     <SCRIPT LANGUAGE='JavaScript'>
  143. document.location.href='$this->urlPage'
  144.         </SCRIPT>" ) ;
  145. $access = FALSE ;
  146. return $access ;
  147. }
  148. }
  149. }
  150. //on vérifie les droits de l'utilisateur en cours:
  151. function checkPriviledges( $login )
  152. {
  153.  //echo( "<br><center>checkPriviledges: LANCEE</center>" ) ;
  154.  $sql     = "SELECT privilege
  155.    FROM user
  156.    WHERE login_user = '$login' " ;
  157.  $requete = execReq( $sql, $this->cnx ) ;
  158.  if( $result  = mysql_fetch_object( $requete ) )
  159.  {
  160.  $droits = $result->privilege ;
  161.  //echo( "<br><center>Vos droits sont: ".$droits."</center>" ) ;
  162.  return $droits ;
  163.  }
  164.  }
  165. //fonction pour se déconnecter:
  166. function deconnect($url)
  167.        {
  168. $sql  = "DELETE FROM session
  169.   WHERE id_session='$this->idSession' ";
  170.  $requete = ExecReq ( $sql, $this->cnx );
  171. echo( "<SCRIPT LANGUAGE='JavaScript'>
  172.  document.location.href='$url'
  173.                 </SCRIPT>" );
  174.         }
  175.   
  176. function enregistre( $nom )
  177.  {
  178.  session_register($nom) ;
  179.  //return $nom ;
  180.  }
  181.   
  182.  function efface( $nom )
  183.   {
  184.  session_unregister($nom) ;
  185.   }
  186. }//fin de la classe startSession
  187. Je précise que execReq est uns fonction que j'ai crée pour éviter de taper à chaque fois mysql_query.....
  188. :)
  189. ?>

Reply

Marsh Posté le 21-02-2003 à 10:51:55   

Reply

Marsh Posté le 21-02-2003 à 11:01:08    

si tu mettais le msg derreur en entier merci ...
 
c surement Output already started at FICHIER LIGNE ...
 
enfin surement un espace qui traine

Reply

Marsh Posté le 21-02-2003 à 11:03:23    

-- en partie grilled --
qd il te met ce message, il devrait te dire également où il a rencontré un problème.  Essaye d'en savoir plus.
 
Sinon, veilles à  n'avoir aucun espace ou ligne avant les balises "<?" ou après "?>" dans tes pages incluses.


Message édité par ethernal le 21-02-2003 à 11:03:57
Reply

Marsh Posté le 21-02-2003 à 11:05:46    

MErci pour la rapidité de la réponse ;)
 
voilà le message qu'il m'affiche:
Warning: Cannot add header information - headers already sent by (output started at /var/www/html/creaRub/class/startSession.class.php:133) in /var/www/html/creaRub/index.php on line 33
 
:)

Reply

Marsh Posté le 21-02-2003 à 11:09:41    

donc à la ligne 33 de ton fichier index.php, tu as un echo (je suppose) qui fait planter la ligne 133 de ta classe de session (ou le contraire  :??: ).


Message édité par ethernal le 21-02-2003 à 11:10:22
Reply

Marsh Posté le 21-02-2003 à 11:13:36    

HA oui dans ma classe à la ligne 133 il y avait un echo, que j'avais rajouter pour tester si ma classe fonctionnait correctement(ce dont je ne suis pas tout à fait sur mais bon... ;) )
 
Je l'ai mis en commentaire on verra bien si ça me le refait ou pas :)

Reply

Sujets relatifs:

Leave a Replay

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