opanis Posté 17 Août 2005 Posté 17 Août 2005 Bonjour, je viens de m'abonner a ovh 60gp et j'ai un petit probleme, je n'arrive pas a faire fonctionné ma session qui marché en local on diré que ovh n'accepte pas les sessions privé car session_start() met une erreur sur chacune de mes pages et quand je m'indentifié j'ai comme message "Cannot modify header information - headers already sent by (output started at /home.2/mairieve/www/config.inc.php:30) in /home.2/..." merci de m'aider
Dan Posté 17 Août 2005 Posté 17 Août 2005 Salut Opanis, C'est tout simplement parce que ta page a déjà envoyé de l'info vers le navigateur. Il n'est donc plus possible de lancer une session vu que les entêtes ont été envoyées. session_start() doit impérativement être utilisé tout au début de ta page, avant que tout caractère soit envoyé, même un espace ou une ligne vide. Le mieux est de commencer en ligne 1 du fichier par <?phpsession_start();// ton code ici?> Dan
opanis Posté 18 Août 2005 Auteur Posté 18 Août 2005 je m'en doute mais le probleme quand je le laisse les sessions marche pas et j'ai comme mesage sur mes autres pages : Warning: session_start(): Cannot send session cookie - headers already sent by (output started at /home.2/www/accueilfi2.php:13) in /home.2/www/config.inc.php on line 2 Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at /home.2/www/accueilfi2.php:13) in /home.2/www/config.inc.php on line 2
broadcastor Posté 18 Août 2005 Posté 18 Août 2005 est ce que tu n'as pas un echo qui traine ou un print_r? si c'est le cas enleve les et reesaye
Dan Posté 18 Août 2005 Posté 18 Août 2005 Le message "headers already sent" signifie qu'il y a déjà eu des caractères envoyés vers le navigateur avant l'appel à headers(), à set_cookie() ou à session_start(). Il suffit de rechercher à quel endroit tes sources font un écho, ou comme je te l'ai dit de remonter ce code vers la première ligne. Dan
opanis Posté 18 Août 2005 Auteur Posté 18 Août 2005 Bonjour, En faite j'ai créer un fichier config.php où se situe la session_start() config.inc.php <?phpsession_start();$dureeSession="15";$hote ="mes code";[COLOR=red] ds la vrai version il sont bien configurer$login_base ="...";$pwd ="....";$base =".....";function connex_base( $hote, $login_base, $pwd, $base){ $cnx= mysql_connect( $hote, $login_base, $pwd ); if (!$cnx) { echo "erreur...+"; return false; } else{ $cnx_base= mysql_select_db($base, $cnx); if ( $cnx_base ) { return $cnx; } else{ echo "erreur..."; return false; } }}?> Aprés dans chaque page sécurisé de ma session qui nécessite un code pour y aller j'ai une entete.inc.php <?phpsession_start()require_once( "../config.inc.php" );$connexion = connex_base( $hote, $login_base, $pwd, $base );function valid_session($session, $connexion) { $id = session_id(); $query = "SELECT debut from session WHERE id_session='$id' AND clos='N' AND now() BETWEEN debut AND fin"; $result = mysql_query($query, $connexion); $nb = mysql_num_rows($result); if ( $nb>0 ) { $ligne = mysql_fetch_array($result); return $ligne[debut]; } else{ return 0;}}function maj_session( $debut, $connexion,$dureeSession ) { $id=session_id(); $query ="UPDATE session SET fin = DATE_ADD(now(), interval ".$dureeSession." minute)"; $query .="WHERE id_session= '$id' "; $query .="AND clos='N' AND debut = '$debut'"; mysql_query($query, $connexion); $result=mysql_query("select fin FROM session WHERE id_session= '$id' AND debut = '$debut' "); $ligne= mysql_fetch_array($result); return $ligne[fin];}/* Programme pricipal */$debut = valid_session( $session, $connexion );if ( $debut == 0 ) { header("location: erreur.htm");}else { $fin = maj_session($debut, $connexion, $dureeSession);}?> puis enfin j'ai un fichier d'authentification : <?php require("config.inc.php"); $connexion = connex_base($hote, $login_base, $pwd, $base); // Login et mot de passe en provenance de connexion.html $login = $_POST['login']; $pwd = $_POST['pwd']; #Fonction de verification du login/mdp function verif_auth($login, $pwd, $connexion ) { $query = "select idp from user "; $query .= "where login='" . $login . "' "; $query .= "and pass = md5('".$pwd."')"; $result = mysql_query($query); $nb = mysql_num_rows( $result); return $nb; } function session_vide( $connexion ) { // la table sessions est vide? $query = "SELECT * from session"; $result = mysql_query($query, $connexion); $nb=mysql_num_rows( $result); return $nb;}function en_cours( $login, $connexion ) { $id=session_id(); $query = "SELECT * from session WHERE id_session='$id' "; $query .= "AND clos='N' AND login='$login' "; $query .= "AND now() BETWEEN debut AND fin "; $result = mysql_query($query, $connexion); $nb=mysql_num_rows($result); return $nb;}function clos_anc_session( $connexion ) { $query = "SELECT id_session, debut from session WHERE clos='N' AND now() > fin "; $result = mysql_query($query, $connexion); $nb=mysql_num_rows($result); while ($ligne=mysql_fetch_array($result) ) { $query_clos = "UPDATE session SET clos='O'"; $query_clos .= "WHERE id_session='$ligne[id_session]' AND debut='$ligne[debut]'"; mysql_query($query_clos, $connexion); } return $nb;}function nouv_session( $login, $connexion, $dureeSession) { $id=session_id(); $query = "INSERT INTO session (login, debut, id_session, fin) "; $query .= "VALUES ('$login', now(), '$id', DATE_ADD(now(),INTERVAL ".$dureeSession." MINUTE) )"; $result = mysql_query($query, $connexion); return $result;}/* Programme principal */ $n = clos_anc_session( $connexion ); if( verif_auth( $login, $pwd, $connexion ) == 1 ){ $sessvide = session_vide($connexion); $sessactive = en_cours( $login, $connexion ); if( $sessactive == 0 or $sessvide == 0 ){ $ok = nouv_session( $login, $connexion, $dureeSession); if( $ok ){ header("Location: admin.php".SID); } } if( $sessactive > 0 ){ header("Location: admin.php".SID); } } else{ //echo "Erreur lors de l'authentification"; header( "Location: erreur.htm"); }?>
Dan Posté 18 Août 2005 Posté 18 Août 2005 Dans ton fichier entete.inc.php tu lances session_start() puis fais un include de config.inc.php qui lance lui aussi session_start() . C'est un session_start() de trop :!: Ne cherches pas plus loin Dan
broadcastor Posté 18 Août 2005 Posté 18 Août 2005 je vais me lancer dans une réponse, jespere que je dirais pas de conner........bref. Tu fais un session_start puis un include de config.php qui contient egalement session_start. Si j'étais fort en php je dirais que le probleme vient de là, con que je sois pas fort ! lol session_start()require_once( "../config.inc.php" );
opanis Posté 18 Août 2005 Auteur Posté 18 Août 2005 quand je supprime le session_start de entete.inc.php j'ai toujours le pb
opanis Posté 18 Août 2005 Auteur Posté 18 Août 2005 Vu que quand je laisse le session_start(); dans le config cela pose un probleme sur toute mes pages comme je l'explique dans mon premier message, j'ai donc mis ce code dans l'entete mais aucune page s'ouvre mais la session est bien créer dans la base de donnée
petit-ourson Posté 18 Août 2005 Posté 18 Août 2005 tu as pas des sauts de ligne avant ta première balise <?php ....
Dan Posté 18 Août 2005 Posté 18 Août 2005 Assure-toi de ne pas avoir le moindre caractère avant le <?php du fichier de config. Il faut que ce soit en tout début de fichier !
opanis Posté 18 Août 2005 Auteur Posté 18 Août 2005 Mon <?php est sur la ligne 1 de chacun de mes fichiers
opanis Posté 18 Août 2005 Auteur Posté 18 Août 2005 l'erreur me semble venir de la ligne header( "Location: admin.php"); d'aprés ce qu'il m'affiche mais je la trouve pas
Dan Posté 18 Août 2005 Posté 18 Août 2005 C'est la dernière ligne du troisième fichier. Je n'avais pas lu aussi loin Effectivement, tu ne peux pas faire un header("location:...."); après le session_start(), vu que le session_start() a déjà envoyé les entêtes de session. Remplaces cette ligne par include("admin.php") cela devrait mieux marcher. Pense à supprimer le session_start() du fichier admin.php ... Dan
opanis Posté 18 Août 2005 Auteur Posté 18 Août 2005 cela ne marche pas non plus je sais plus quoi faire
Anonymus Posté 18 Août 2005 Posté 18 Août 2005 je m'en doute mais le probleme quand je le laisse les sessions marche pas et j'ai comme mesage sur mes autres pages : Warning: session_start(): Cannot send session cookie - headers already sent by (output started at /home.2/www/accueilfi2.php:13) in /home.2/www/config.inc.php on line 2 Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at /home.2/www/accueilfi2.php:13) in /home.2/www/config.inc.php on line 2 <{POST_SNAPBACK}> A priori, l'erreur vient de là : output started at /home.2/www/accueilfi2.php:13 Jettes un oeil à la ligne 13 du fichier accueilfi2.php, et postes nous le début de ce fichier
opanis Posté 20 Août 2005 Auteur Posté 20 Août 2005 voila le début de ma page accueilfi2 : <html> <head><link rel="stylesheet" href="style.css" type="text/css"> <meta http-equiv="Content-Type" content="text/html; charset=windows-1252"> <meta name="GENERATOR" content="Microsoft FrontPage 4.0"> <meta name="ProgId" content="FrontPage.Editor.Document"> <title>Nouvelle page 3</title> <link rel="STYLESHEET" type="text/css" href="stylesheet.css"> </head> <body background="images/fond2.jpg" bgproperties="fixed"> <p> <?php
opanis Posté 20 Août 2005 Auteur Posté 20 Août 2005 J'aurais juste une question est-ce que le serveur ovh 60 gp accepte les sessions car on dirait justement qu'il n'accepte pas la commande session_star() et lorsque j'essai de me conecté en retrant mon login et mon mot passe il me dit que c'est impossible alors que la session s'ouvre bien sous la base de donnée A quoi sert le répertoire sessions à la racine de mon espace perso ( moi je met tous dans www) merci
petit-ourson Posté 20 Août 2005 Posté 20 Août 2005 oui le 60gp accepte les sessions. Le repertoire session permet sans doute de stocker .... les sessions
opanis Posté 20 Août 2005 Auteur Posté 20 Août 2005 Cannot modify header information - headers already sent by (output started at /home.2/www/config.inc.php:29)
opanis Posté 20 Août 2005 Auteur Posté 20 Août 2005 Warning: session_start(): Cannot send session cookie - headers already sent by (output started at /home.2/mairieve/www/gestion/admin2.php:15) in /home.2/mairieve/www/gestion/entete.inc.php on line 3 Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at /home.2/mairieve/www/gestion/admin2.php:15) in /home.2/mairieve/www/gestion/entete.inc.php on line 3 Warning: Cannot modify header information - headers already sent by (output started at /home.2/mairieve/www/gestion/admin2.php:15) in /home.2/mairieve/www/gestion/entete.inc.php on line 29 maintenant j'ai ces erreurs ce qui fait que les pages ne sont pas protéger par un code
Anonymus Posté 20 Août 2005 Posté 20 Août 2005 voila le début de ma page accueilfi2 :<html> <head><link rel="stylesheet" href="style.css" type="text/css"> <meta http-equiv="Content-Type" content="text/html; charset=windows-1252"> <meta name="GENERATOR" content="Microsoft FrontPage 4.0"> <meta name="ProgId" content="FrontPage.Editor.Document"> <title>Nouvelle page 3</title> <link rel="STYLESHEET" type="text/css" href="stylesheet.css"> </head> <body background="images/fond2.jpg" bgproperties="fixed"> <p> <?php <{POST_SNAPBACK}> Pour cette page : Tu envoies des infos au navigateur, avant d'activer les sessions, ce qui fait une erreur. Il te faut activer d'abord les sessions, puis seulement ensuite envoyer l'entète du site. Pour cela, tu peux remplacer ton code par celui ci : <html><? session_start(); ?><head><link rel="stylesheet" href="style.css" type="text/css"><meta http-equiv="Content-Type" content="text/html; charset=windows-1252"><meta name="GENERATOR" content="Microsoft FrontPage 4.0"><meta name="ProgId" content="FrontPage.Editor.Document"><title>Nouvelle page 3</title><link rel="STYLESHEET" type="text/css" href="stylesheet.css"> </head><body background="images/fond2.jpg" bgproperties="fixed"><p><?php Et enlever le 'session_start()' qui doit trainer plus loin.
opanis Posté 20 Août 2005 Auteur Posté 20 Août 2005 ok merci mais j'ai toujours les 3 erreurs de mon dernier messages merci a tous pour votre aide
Dan Posté 20 Août 2005 Posté 20 Août 2005 Le code donné par anonymus n'est pas bon ! Il faut faire le session_start() AVANT d'écrire la balise <html> ... après c'est trop tard !!! Tant que tu auras cette erreur, c'est que tu envoies des données au navigateur. Cela fait plusieurs fois que je te le dis ! Merci de regarder ton code et trouver l'endroit où tu commences à envoyer les données... parce que là on tourne en rond !
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant