Probleme session-start() PHP
Zanjutsu
-
aure-kun Messages postés 6 Statut Membre -
aure-kun Messages postés 6 Statut Membre -
BBonjour à tous !
J'ai un problème avec mon site, en effet je souhaites créer un espace membre en utilisant session_start() lorsque je donne le login et mot de passe ca m'affiche ceci:
Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at /var/www/Site Mangas/Administration/Ad_Login_Exec.php:3) in /var/www/Site Mangas/Administration/Ad_Login_Exec.php on line 28
Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /var/www/Site Mangas/Administration/Ad_Login_Exec.php:3) in /var/www/Site Mangas/Administration/Ad_Login_Exec.php on line 28
Warning: Cannot modify header information - headers already sent by (output started at /var/www/Site Mangas/Administration/Ad_Login_Exec.php:3) in /var/www/Site Mangas/Administration/Ad_Login_Exec.php on line 32
Voici la page Ad_Login_Exec :
<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,NOM,MOTDEPASSE) or die ("erreur de connexion au serveur mysql :".SERVEUR);
mysql_select_db(BASE, $cnx) or die ("erreur lors de la sélection à la BDD : ".BASE);
//La requête de vérification de l'existence de l'utilisateur
$LaRequete ="SELECT Login FROM T_Utilisateurs
WHERE Login ='". $MonLogin . "'
AND MotDePasse = md5('" . $MonPassword . "');";
//exécution de la requête
$ResultatRequete = mysql_query($LaRequete) or die("Erreur SQL ! <br><br>".$LaRequete."<br><br>".mysql_error);
mysql_close($cnx);
//si aucun retour c'est que l'utilisateur ou le mot de passe n'est pas valide
if (mysql_num_rows($ResultatRequete)==0)
{ //retour à la page login
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
//on enregistre la variable utilisateur en tant que variable session
$_SESSION['Utilisateur']=$MonLogin;
header('location:Ad_MenuAdministration.php'); //redirection vers le menu d'administration
}
?>
</body>
</html>
J'ai un problème avec mon site, en effet je souhaites créer un espace membre en utilisant session_start() lorsque je donne le login et mot de passe ca m'affiche ceci:
Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at /var/www/Site Mangas/Administration/Ad_Login_Exec.php:3) in /var/www/Site Mangas/Administration/Ad_Login_Exec.php on line 28
Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /var/www/Site Mangas/Administration/Ad_Login_Exec.php:3) in /var/www/Site Mangas/Administration/Ad_Login_Exec.php on line 28
Warning: Cannot modify header information - headers already sent by (output started at /var/www/Site Mangas/Administration/Ad_Login_Exec.php:3) in /var/www/Site Mangas/Administration/Ad_Login_Exec.php on line 32
Voici la page Ad_Login_Exec :
<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,NOM,MOTDEPASSE) or die ("erreur de connexion au serveur mysql :".SERVEUR);
mysql_select_db(BASE, $cnx) or die ("erreur lors de la sélection à la BDD : ".BASE);
//La requête de vérification de l'existence de l'utilisateur
$LaRequete ="SELECT Login FROM T_Utilisateurs
WHERE Login ='". $MonLogin . "'
AND MotDePasse = md5('" . $MonPassword . "');";
//exécution de la requête
$ResultatRequete = mysql_query($LaRequete) or die("Erreur SQL ! <br><br>".$LaRequete."<br><br>".mysql_error);
mysql_close($cnx);
//si aucun retour c'est que l'utilisateur ou le mot de passe n'est pas valide
if (mysql_num_rows($ResultatRequete)==0)
{ //retour à la page login
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
//on enregistre la variable utilisateur en tant que variable session
$_SESSION['Utilisateur']=$MonLogin;
header('location:Ad_MenuAdministration.php'); //redirection vers le menu d'administration
}
?>
</body>
</html>
A voir également:
- Probleme session-start() PHP
- Easy php - Télécharger - Divers Web & Internet
- Www.yahoomail.com ouverture de session ✓ - Forum Yahoo mail
- Start pxe over ipv4 - Forum Windows 10
- Session invalide ou obsolète - Forum Consommation & Internet
- Expert php pinterest - Télécharger - Langages
4 réponses
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é)
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
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
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 ?
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