qwix | 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 :
- <?php
- //startSession.class.php:
- include( "./include/fonctions.inc.php" ) ;
- //début de la classe startSession:
- class startSession
- {
- //identifiant de session:
- var $idSession ;
- //login de l'utilisateur:
- var $login ;
- //url:
- var $urlPage ;
- //nom de la connection au serveur:
- var $cnx ;
- //constructeur:
- function startSession( $SERVEUR, $USER, $PASS, $DB, $urlPage)
- {
- if( session_start() )
- echo( "<br><center>session started.</center>" ) ;
- $this->cnx = connect( $SERVEUR, $USER, $PASS, $DB );
- $this->idSession = session_id() ;
- $this->urlPage = $urlPage ;
- }
- //on vérifie que le login et le mot de passe sont corrects:
- function checkUser( $login )
- {
- $sql = "SELECT *
- FROM user
- WHERE login_user = '$login' " ;
- $requete = execReq( $sql, $this->cnx ) ;
- $result = mysql_fetch_object( $requete ) ;
- return $result ;
- }
- //on vérifie que l'utilisateur n'a pas déjà une session en cours:
- function checkSession()
- {
- $sql = "SELECT *
- FROM session
- WHERE id_session = '$this->idSession' " ;
- $requete = execReq( $sql, $this->cnx ) ;
- $result = mysql_fetch_object( $requete ) ;
- return $result ;
- }
- //on vérifie que la session et toujours valide:
- function checkSessionValidity()
- {
- //on vérifie que le temps limite n'est pas dépassé:
- $sql = "SELECT heure
- FROM `session`
- WHERE id_session = '$this->idSession' " ;
-
- $requete = execReq( $sql, $this->cnx ) ;
- if( $result = mysql_fetch_object( $requete ) )
- $heure = $result->heure ;
- if( $now > $heure+60 )
- {
- //on supprime la session:
- session_destroy() ;
- //on supprime les données de la base de données
- $sql = "DELETE
- FROM session
- WHERE id_session = '$this->idSession' " ;
- $requete = execReq( $sql, $this->cnx) ;
- if( $requete )
- echo( "<br><center>suppression de la session.</center>" ) ;
- return FALSE ;
- }
- else
- {
- return TRUE ;
- }
- }
- //on crée une session :
- function creeSession( $login, $pass )
- {
- $user = $this->checkUser( $login ) ;
- //on vérifie si l'utilisateur existe:
- if( is_object( $user ) )
- {
- //il existe, on vérifie alors si son mot de passe est correct:
- if( $user->pass_user == $pass )
- {
- //si tout est bon, on insère les données dans la table session:
- $now = date( "U" ) ;
- $sql = "INSERT INTO session(id_session, session_login, heure VALUES('$this->idSession', '$login', '$now') " ;
-
- $result = execReq( $sql, $this->cnx ) ;
- $nomSession = $this->enregistre( $login ) ;
- return TRUE ;
- }
- //si le mot de passe est incorrect on affiche un message d'erreur:
- else
- {
- return FALSE ;
- }
- }
- //l'utilisateur n'existe pas:
- else
- {
- echo( "<br><center>Désolé ".$login." mais vous n'existez pas. Vous n'avez pas le droit d'utiliser le créaRub</center>" ) ;
- return FALSE ;
- }
- }
- //on contrôle l'accès des utilisateurs:
- function checkAccess( $login, $pass )
- {
- echo( "<br><center>checkAccess:LANCEE, login: $login, pass: $pass</center>" ) ;
- //on regarde s'il y a une session en cours:
- $currentSession = $this->checkSession() ;
- //cas 1: on vérifie la session en cours:
- //si il y a une session en cours:
- if( is_object( $currentSession ) )
- {
- //on vérifie si cette session est encore valide:
- if( $this->checkSessionValidity( $currentSession ) )
- {
- //on garde l'email de l'utilisateur:
- $this->login = $currentSession->login_user ;
- $access = TRUE ;
- return $access ;
- }
- else
- {
- echo( "<br><center>Votre session n'est plus valide veuillez cliquer <a href='index.php' target='_blank'>ici</a> pour vous reloguer.</center>" ) ;
- $access = FALSE ;
- return $access ;
- }
- }
- //cas 2: il n'y a pas de session, mais l'utilisateur existe:
- if( ( isset( $login ) ) && ($access == FALSE ) )
- {
- if( $this->creeSession( $login, $pass ) )
- {
- //on garde l'email de l'utilisateur:
- $this->login = $login ;
- $access = TRUE ;
- return $access ;
- }
- else
- {
- echo( "<br><center>L'identification à échouée</center>
- <SCRIPT LANGUAGE='JavaScript'>
- document.location.href='$this->urlPage'
- </SCRIPT>" ) ;
- $access = FALSE ;
- return $access ;
- }
- }
- }
- //on vérifie les droits de l'utilisateur en cours:
- function checkPriviledges( $login )
- {
- //echo( "<br><center>checkPriviledges: LANCEE</center>" ) ;
- $sql = "SELECT privilege
- FROM user
- WHERE login_user = '$login' " ;
- $requete = execReq( $sql, $this->cnx ) ;
- if( $result = mysql_fetch_object( $requete ) )
- {
- $droits = $result->privilege ;
- //echo( "<br><center>Vos droits sont: ".$droits."</center>" ) ;
- return $droits ;
- }
- }
- //fonction pour se déconnecter:
- function deconnect($url)
- {
- $sql = "DELETE FROM session
- WHERE id_session='$this->idSession' ";
- $requete = ExecReq ( $sql, $this->cnx );
- echo( "<SCRIPT LANGUAGE='JavaScript'>
- document.location.href='$url'
- </SCRIPT>" );
- }
-
- function enregistre( $nom )
- {
- session_register($nom) ;
- //return $nom ;
- }
-
- function efface( $nom )
- {
- session_unregister($nom) ;
- }
- }//fin de la classe startSession
- Je précise que execReq est uns fonction que j'ai crée pour éviter de taper à chaque fois mysql_query.....
- :)
- ?>
|
|