Probleme session-start() PHP
Fermé
Zanjutsu
-
14 mai 2010 à 14:12
aure-kun Messages postés 4 Date d'inscription lundi 3 mai 2010 Statut Membre Dernière intervention 25 mai 2010 - 25 mai 2010 à 18:20
aure-kun Messages postés 4 Date d'inscription lundi 3 mai 2010 Statut Membre Dernière intervention 25 mai 2010 - 25 mai 2010 à 18:20
A voir également:
- Probleme session-start() PHP
- Easy php - Télécharger - Divers Web & Internet
- Hp easy start ✓ - Forum Imprimante
- Supprimer microsoft start ✓ - Forum Windows 10
- Supprimer microsoft news ✓ - Forum Windows 10
- Ants session déconnectée - Forum Services en ligne
4 réponses
Nabla's
Messages postés
18203
Date d'inscription
mercredi 4 juin 2008
Statut
Contributeur
Dernière intervention
28 avril 2014
3 193
Modifié par Nabla's le 14/05/2010 à 14:24
Modifié par Nabla's le 14/05/2010 à 14:24
et oui, evidement, le cookie de sesion est envoyé dans le header (avant l'html). et toi tu nous fait ca :
<html>
<body>
<?php
require("Connect.php");
//récupération des données de la page login (Ad_Login)
$MonLogin = $_POST["Login"];
$MonPassword = $_POST["MotDePasse"];
$cnx = mysql_connect(SERVEUR
tu envoies du html, puis dedan tu déclare l'envoi d'un cookie. ca ne peut pas marcher (sauf en activant la bufferisation). il faut que tu mette ton require("connect.php") au début du fichier:
<?php require("Connect.php"); ?>
<html>
<body>
<?php
//récupération des données de la page login (Ad_Login)
$MonLogin = $_POST["Login"];
$MonPassword = $_POST["MotDePasse"];
$cnx = mysql_connect(SERVEUR
retiens ceci: a partir du moment ou t'as du HTML ou un ECHO qui a été executé, t'as plus le droit d'envoyer de cookie (session ou autre), ni de modifier une autre entete HTTP. Meme une ligne vide ou du commentaire HTML te fera planter. et meme un fichier avec BOM te fera planté (c'est un octet en début de fichier, je sais plus a quoi il sert, mais il m'a déja emmerdé)
<html>
<body>
<?php
require("Connect.php");
//récupération des données de la page login (Ad_Login)
$MonLogin = $_POST["Login"];
$MonPassword = $_POST["MotDePasse"];
$cnx = mysql_connect(SERVEUR
tu envoies du html, puis dedan tu déclare l'envoi d'un cookie. ca ne peut pas marcher (sauf en activant la bufferisation). il faut que tu mette ton require("connect.php") au début du fichier:
<?php require("Connect.php"); ?>
<html>
<body>
<?php
//récupération des données de la page login (Ad_Login)
$MonLogin = $_POST["Login"];
$MonPassword = $_POST["MotDePasse"];
$cnx = mysql_connect(SERVEUR
retiens ceci: a partir du moment ou t'as du HTML ou un ECHO qui a été executé, t'as plus le droit d'envoyer de cookie (session ou autre), ni de modifier une autre entete HTTP. Meme une ligne vide ou du commentaire HTML te fera planter. et meme un fichier avec BOM te fera planté (c'est un octet en début de fichier, je sais plus a quoi il sert, mais il m'a déja emmerdé)
Alain_42
Messages postés
5361
Date d'inscription
dimanche 3 février 2008
Statut
Membre
Dernière intervention
13 février 2017
894
14 mai 2010 à 14:41
14 mai 2010 à 14:41
je ne pense pas que ce soit Connect.php qui envoie le session_start();
donc il suffit d'enlever
<html>
<body>
au début du script
pour respecter la règle donnée par Nabla's
donc il suffit d'enlever
<html>
<body>
au début du script
pour respecter la règle donnée par Nabla's
Nabla's
Messages postés
18203
Date d'inscription
mercredi 4 juin 2008
Statut
Contributeur
Dernière intervention
28 avril 2014
3 193
14 mai 2010 à 14:58
14 mai 2010 à 14:58
pardon oui, j'avais supposé que c'était dedan, j'avais mal lu tout le code... pusqu'on trouve ces lignes la:
qui vont poser problème. Il faut donc pas faire d'echo ou mettre de html avant ces lignes
header("location:Ad_Login.php?Retour=1"); } else //si les mots de passe et login sont valides {session_start();//on démarre une session $_SESSION['NumSession'] = session_id(); //enregistrement du numéro de session
qui vont poser problème. Il faut donc pas faire d'echo ou mettre de html avant ces lignes
aure-kun
Messages postés
4
Date d'inscription
lundi 3 mai 2010
Statut
Membre
Dernière intervention
25 mai 2010
18 mai 2010 à 22:19
18 mai 2010 à 22:19
Bonjour a vous,
J'ai a peu de choses pres le meme probleme sauf que j'utilise des cookies pour la connexion voici mon code:
Donc lorsque je me connecte aucun message d'erreur n'apparait mais je ne suis pas pas connecté le cookie n'a pas été créer et le message [PHP] Header already sent by (output started at /home/chaudron/public_html/php_log.php:1) in /home/chaudron/public_html/cookie_inc.php on line 5 ... apparait dans le error.log de mon serveur ...
Voici mon php_log.php :
Comment puis-je contourner ce probleme ?
Une chose aussi qui me parait bizarre c'est qu'en local cela fonctionnait très bien pourquoi ?
J'ai a peu de choses pres le meme probleme sauf que j'utilise des cookies pour la connexion voici mon code:
<?php require_once("connexion.php"); $co = mysql_connect($serveur,$user,$mdp); mysql_select_db($base); if(isset($_COOKIE["ID"])){ $connecte = 1 } ?> <html> <head> <body> ...(du code html) <?php if($connecte == 1){ //On recupere le pseudo de l'utilisateur en fonction de son ID unique dans la base de donnée $result = mysql_query ("SELECT pseudo FROM compte WHERE ID = '".$_COOKIE["ID"]."' "); while ($line = mysql_fetch_array($result)){ $pseudo = $line["0"]; } ?> <form method="post" action="php_delog.php"> <table width="100%"> <tr> <td class="pseudo"> <?php echo("Bonjour $pseudo"); ?> </td> </tr> <tr> <td> <input type="submit" name="Deconnexion" value="Deconnexion" id="bouton_deco"/> </td> </tr> </table> </form> <?php } else{ ?> <form method="post" action="php_log.php"> <table> <tr> <td colspan="2"> Identifiant </td> </tr> <tr> <td colspan="2"> <input type="text" maxlength="20" size="23" name="pse"/> </td> </tr> <tr> <td colspan="2"> Mot de passe </td> </tr> <tr> <td colspan="2"> <input type="password" maxlength="20" size="23" name="mdp"/> </td> </tr> <tr> <td> <input type="submit" name="Connexion" value="Connexion" /> </td> <td> <a href="inscription.php"><input type="button" name="S'inscrire" value="S'inscrire" /></a> </td> </tr> </table> </form> <?php } mysql_close($co); ?>
Donc lorsque je me connecte aucun message d'erreur n'apparait mais je ne suis pas pas connecté le cookie n'a pas été créer et le message [PHP] Header already sent by (output started at /home/chaudron/public_html/php_log.php:1) in /home/chaudron/public_html/cookie_inc.php on line 5 ... apparait dans le error.log de mon serveur ...
Voici mon php_log.php :
<?php require_once("connexion.php"); //Si les champs pseudo et mot de passe ne sont pas vide if (!empty($_POST['pse']) and !empty($_POST['mdp'])){ //Connexion à la base de donnée et definition de la variable $active a 1 $link = mysql_connect($serveur,$user,$mdp); mysql_select_db($base); //On recupere l'id du compte dont le pseudo et le mot de passe correspondent $result = mysql_query ("SELECT ID, pseudo, mdp FROM compte WHERE pseudo = '".$_POST["pse"]."' AND mdp = md5('".$_POST["mdp"]."') "); //On Stocke l'id de l'utilisateur while ($line = mysql_fetch_array($result)){ $id_user = $line["0"]; $pseudo = $line["1"]; $mdp = $line["2"]; } mysql_close($link); if($_POST['pse'] == $pseudo and $_POST['mdp'] == $mdp){ //On crée le cookie grace a l'id de l'utilisateur et grace auquel l'utilisateur sera logué et redirection vers l'accueil setcookie("ID",$id_user,(time() + 3600)); echo "<script type=\"text/javascript\"> location='accueil.php' </script>"; } //Si l'identifiant et le mot de passe ne correspondent pas on redirige vers l'accueil else { echo "<script type=\"text/javascript\"> alert(\" Votre identifiant ou votre mot de passe est incorrect\"); location='accueil.php' </script>"; } } //Si un des champs est vide on redirige vers l'accueil else { echo "<script type=\"text/javascript\"> alert(\"Attention un ou plusieurs champs sont vides; veuillez bien remplir tous les champs\"); location='accueil.php' </script>"; } ?>
Comment puis-je contourner ce probleme ?
Une chose aussi qui me parait bizarre c'est qu'en local cela fonctionnait très bien pourquoi ?
Nabla's
Messages postés
18203
Date d'inscription
mercredi 4 juin 2008
Statut
Contributeur
Dernière intervention
28 avril 2014
3 193
21 mai 2010 à 15:42
21 mai 2010 à 15:42
réponse de facilité:
au lieu de faire des echo, prints, ou de mettre du html, tu stoques tout ton code html de retour dans une variable php. Ainsi, tu fais echo tavariable ) la fin du code, et ca passe...
ceci dit, en structurant vos programmes, vous devriez arriver à faire d'abord le traitement, ensuite l'affichage
au lieu de faire des echo, prints, ou de mettre du html, tu stoques tout ton code html de retour dans une variable php. Ainsi, tu fais echo tavariable ) la fin du code, et ca passe...
ceci dit, en structurant vos programmes, vous devriez arriver à faire d'abord le traitement, ensuite l'affichage
aure-kun
Messages postés
4
Date d'inscription
lundi 3 mai 2010
Statut
Membre
Dernière intervention
25 mai 2010
25 mai 2010 à 18:20
25 mai 2010 à 18:20
Merci de ta reponse,
Effectivement si j'aurais mieux raisonner mon code aurait été plus propre ... je pense que quand j'aurais le temps je reprendrai tout depuis le debut
Effectivement si j'aurais mieux raisonner mon code aurait été plus propre ... je pense que quand j'aurais le temps je reprendrai tout depuis le debut