Page 1 sur 2

Probleme cookies

Posté : 17 déc. 2011, 09:56
par zerodegre
Bonjour je viens de mettre dans ma page connexion une commande pour garder la connexion active durant plusieur jours mais la j'ai un probleme j'ai pas d'erreur mais la connexion ne reste pas active il faut a chaque fois se reconnecter a l'ouverture de firefox.

Mon code ci dessous est t-il bon ?????


<?php
//Si lutilisateur est connecte, on le deconecte
if(isset($_SESSION['username']))
{
	//On le deconecte en supprimant simplement les sessions username et userid
	unset($_SESSION['username'], $_SESSION['userid']);
?>
<center><div class="titre3">Vous avez bien &eacute;t&eacute; d&eacute;connect&eacute;.</center><br />
<meta http-equiv="refresh" content="0; url=?page=espace_membre"/>
<?php
}
else
{
	$ousername = '';
	//On verifie si le formulaire a ete envoye
	if(isset($_POST['username'], $_POST['password']))
	{
		//On echappe les variables pour pouvoir les mettre dans des requetes SQL
		if(get_magic_quotes_gpc())
		{
			$ousername = stripslashes($_POST['username']);
			$username = mysql_real_escape_string(stripslashes($_POST['username']));
			$password = stripslashes($_POST['password']);
		}
		else
		{
			$username = mysql_real_escape_string($_POST['username']);
			$password = $_POST['password'];
		}
		//On recupere le mot de passe de lutilisateur
		$req = mysql_query('select password,id from users where username="'.$username.'"');
		$dn = mysql_fetch_array($req);
		//On le compare a celui quil a entre et on verifie si le membre existe
		if($dn['password']==$password and mysql_num_rows($req)>0)
		{
			//Si le mot de passe es bon, on ne vas pas afficher le formulaire
			$form = false;
			//On enregistre son pseudo dans la session username et son identifiant dans la session userid
			$_SESSION['username'] = $_POST['username'];
			$_SESSION['userid'] = $dn['id'];
?>
<center><div class="titre3">Vous avez bien &eacute;t&eacute; connect&eacute;. Vous allez etre redirigé vers votre espace membre.</center><br /><br />
<meta http-equiv="refresh" content="0; url=?page=espace_membre"/>
<?php
		}
		else
		{
			//Sinon, on indique que la combinaison nest pas bonne
			$form = true;
			$message = 'l\'utilisateur ou le mot de passe que vous avez entr&eacute; est incorrecte.';
		}
	}
	else
	{
		$form = true;
	}
	if($form)
	{
		//On affiche un message sil y a lieu
	if(isset($message))
	{
		echo '<div class="message">'.$message.'</div>';
	}
	//On affiche le formulaire
?>





<?php
if (isset($_POST['remember'])) {
setcookie('username', '$username', time() + 86400 /* Pour une journée */);
}
?>




<table width="650" border="0" align="center">
<tr>
<td align="center"><font color="white">Veuillez entrer vos identifiants pour vous connecter:</font></td>
</tr>
<tr><td>&nbsp;</td></tr>
 <form action="?page=connexion" method="post">

 <div align="center"></div>

<table width="350" border="0" align="center">
<p align="center">
</p><tr>
      <td width="10%" class="alt1"><font face="Verdana" ><font color="white">*</font><font color="red"> Nom d'utilisateur :</font></td>
      <td align="left" width="10%" class="alt2"><input type="text" name="username" id="username" value="<?php echo htmlentities($ousername, ENT_QUOTES, 'UTF-8'); ?>" /></td>
    </tr>
	
	<tr>
     <td width="10%" class="alt1"><font face="Verdana" ><font color="white">*</font><font color="red"> Mot de passe :</font></td>
      <td align="left"  class="alt2"><input type="password" name="password" id="password" /></td>
     </tr>
<table width="350" border="0" align="center">

		
	<tr><td>&nbsp;</td></tr>
	 <tr><td><input type="checkbox" name="remember" value="1" /> <font color="white">Se souvenir de moi</font></td></tr>
	<tr><td>&nbsp;</td></tr>
	<table width="400" border="0" align="center">

 <tr><td align="center">
             <input type="submit" value="Connexion" />
</td></tr>
    </form>
</div>

</table>
<?php
	}
}
?>

Re: Probleme cookies

Posté : 17 déc. 2011, 11:12
par Ryle
Ton code défini bien un nouveau cookie sur le disque de l'utilisateur (avec setcookie), mais à aucun moment dans ton code tu ne viens lire $_COOKIE pour savoir si l'utilisateur dispose d'un cookie sur son poste et faire le traitement qui va bien pour l'authentifier automatiquement... ;)

Re: Probleme cookies

Posté : 17 déc. 2011, 11:15
par zerodegre
merci de ta reponse mais quelle commande pour venir lire ?

Re: Probleme cookies

Posté : 17 déc. 2011, 11:22
par Ryle
Il suffit de faire appel à la variable $_COOKIE['le_nom_de_ton_cookie'] pour lire le contenu du cookie nommé le_nom_de_ton_cookie.

Ca fonctionne comme pour les sessions :)

Re: Probleme cookies

Posté : 17 déc. 2011, 11:36
par zerodegre
je dois placer apres cette commande ???? comme ci dessous ?
<?php
if (isset($_POST['remember'])) {
setcookie('username', 'blabla', time() + 86400 /* Pour une journée */);

$_COOKIE['username'];
}


?>


Re: Probleme cookies

Posté : 17 déc. 2011, 12:14
par zerodegre
faudrait -il pas que je lise le cookie via le header et l'ecrire dans connexion.PHP ???

exemple dans mon HEADER.PHP pour le bouton connexion j'ai ça :


 <?php if(isset($_SESSION['username']))
				 
				 {
				 $_COOKIE['username'];
				 echo '<li><a href="?page=espace_membre" class="parent"><span><font color="red">Espace membre</span></font></a></li>';
				 
				 }
				 else
				 {
				 echo '<li><a href="?page=espace_membre" class="parent"><span><font color="green">Connexion</span></font></a></li>';
				 }; 
				 
				 ?>


et dans la page CONNEXION.PHP j'ai ça :

<?php
if (isset($_POST['remember'])) {
setcookie('username', 'blabla', time() + 86400 /* Pour une journée */);


}


?>


Mai ça marche pas des que je ferme firefox je dois me reloguer la je cale arffff
cette commande en plus n'ecrit pas apparemment, j'ai verifier dans firefox aucun cookies

<?php
if (isset($_POST['remember'])) {
setcookie('teste', 'blabla', time() + 365*24*3600 /* Pour un an */);

$_COOKIE['teste'];

}
?>

Re: Probleme cookies

Posté : 17 déc. 2011, 14:35
par Aureusms
As tu configurer Firefox pour accepter les cookies ? Différents cas sont possibles :
- cookies volatiles (qui disparaissent à la fermeture de Firefox comme les sessions)
- cookies qui peuvent inscrit sur le DD du visiteur
- pas de cookies

Ton code ci :
<?php
if (isset($_POST['remember'])) {
setcookie('username', 'blabla', time() + 86400 /* Pour une journée */);
}
?>
indique que si l'utilisateur envoi un formulaire qui comprend un champ "name" appellé "remember" alors un cookie est envoyé.
Rien n'indique que le cookies et lu par la suite.
Il faudrait aussi que tu testes si le cookies est bien visible :
if (!empty($_COOKIE['username']))
{
  echo 'cookie bien arrivé : utilisateur confirmé';
}
else
{
  echo 'pas utilisateur';
  if (isset($_POST['remember'])) {
    setcookie('username', 'blabla', time() + 86400 /* Pour une journée */);
  }
}

Re: Probleme cookies

Posté : 18 déc. 2011, 00:12
par zerodegre
Bonsoir je viens de tester ton code est apparemment le cookies n'est pas créer j'ai toujours ecrit ==> pas d'utilisateur

voila comment j'ai inseré ça ==>


Code : Tout sélectionner

<?php if (!empty($_COOKIE['teste'])) { echo 'cookie bien arrivé : utilisateur confirmé'; } else { echo 'pas utilisateur'; if (isset($_POST['remember'])) { setcookie('teste', 'moi', time() + 86400 /* Pour une journée */); } } ?> <table width="650" border="0" align="center"> <tr> <td align="center"><font color="white">Veuillez entrer vos identifiants pour vous connecter:</font></td> </tr> <tr><td>&nbsp;</td></tr> <form action="?page=connexion" method="post"> <div align="center"></div> <table width="350" border="0" align="center"> <p align="center"> </p><tr> <td width="10%" class="alt1"><font face="Verdana" ><font color="white">*</font><font color="red"> Nom d'utilisateur :</font></td> <td align="left" width="10%" class="alt2"><input type="text" name="username" id="username" value="<?php echo htmlentities($ousername, ENT_QUOTES, 'UTF-8'); ?>" /></td> </tr> <tr> <td width="10%" class="alt1"><font face="Verdana" ><font color="white">*</font><font color="red"> Mot de passe :</font></td> <td align="left" class="alt2"><input type="password" name="password" id="password" /></td> </tr> <table width="350" border="0" align="center"> <tr><td>&nbsp;</td></tr> <tr><td><input type="checkbox" name="remember" value="1" /> <font color="white">Se souvenir de moi</font></td></tr> <tr><td>&nbsp;</td></tr> <table width="400" border="0" align="center"> <tr><td align="center"> <input type="submit" value="Connexion" /> </td></tr> </form>

Re: Probleme cookies

Posté : 18 déc. 2011, 01:20
par zerodegre
Toujour aucun enregistrement du cookie Je vous remet ma page entiere CONNEXION.PHP

Code : Tout sélectionner

<?php include('config.php'); ?> <table width="100%" border="0" cellpadding="0" cellspacing="0"> <tr> <td style="width:126px; height:117px;" align="left" valign="top"><img src="./images/cat_top_left.png" style="width:126px; height:117px;" alt="" border="0" /></td> <td width="100%" style="background-image:url(./images/cat_bk.jpg)" align="left"> <div valign="middle"><center> <strong><img src="images/spacer.gif" width="100" height="0" ><font color="white">Connexion à votre espace personnel</strong></div></font> </td> <td style="width:258px;" align="right" valign="top"><img src="./images/cat_top_right.png" style="width:258px; height:117px;" alt="" border="0" /></td> </tr> </table> <table cellpadding="0" cellspacing="0" border="0" width="100%" height="26" align="center"> <tr> <td valign="top" style="background-image:url(./images/cat_left.jpg)"> <img src="./images/cat_left.jpg" style="width:47px; height:22px;" alt="" border="0" /></td> <td width="100%" valign="top" style="background-image:url(./images/bk_cat.jpg)"> <?php //Si lutilisateur est connecte, on le deconnecte if(isset($_SESSION['username'])) { //On le deconecte en supprimant simplement les sessions username et userid unset($_SESSION['username'], $_SESSION['userid']); ?> <center><div class="titre3">Vous avez bien &eacute;t&eacute; d&eacute;connect&eacute;.</center><br /> <meta http-equiv="refresh" content="0; url=?page=espace_membre"/> <?php } else { $ousername = ''; //On verifie si le formulaire a ete envoye if(isset($_POST['username'], $_POST['password'])) { //On echappe les variables pour pouvoir les mettre dans des requetes SQL if(get_magic_quotes_gpc()) { $ousername = stripslashes($_POST['username']); $username = mysql_real_escape_string(stripslashes($_POST['username'])); $password = stripslashes(md5($_POST['password'])); } else { $username = mysql_real_escape_string($_POST['username']); $password = $_POST['password']; } //On recupere le mot de passe de lutilisateur $req = mysql_query('select password,id from users where username="'.$username.'"'); $dn = mysql_fetch_array($req); //On le compare a celui quil a entre et on verifie si le membre existe if($dn['password']==$password and mysql_num_rows($req)>0) { //Si le mot de passe es bon, on ne vas pas afficher le formulaire $form = false; //On enregistre son pseudo dans la session username et son identifiant dans la session userid $_SESSION['username'] = $_POST['username']; $_SESSION['userid'] = $dn['id']; ?> <center><div class="titre3">Vous avez bien &eacute;t&eacute; connect&eacute;. Vous allez etre redirigé vers votre espace membre.</center><br /><br /> <meta http-equiv="refresh" content="1; url=?page=espace_membre"/> <?php } else { //Sinon, on indique que la combinaison nest pas bonne $form = true; $message = 'l\'utilisateur ou le mot de passe que vous avez entr&eacute; est incorrecte.'; } } else { $form = true; } if($form) { //On affiche un message sil y a lieu if(isset($message)) { echo '<div class="message">'.$message.'</div>'; } //On affiche le formulaire ?> <?php if (!empty($_COOKIE['teste'])) { echo 'cookie bien arrivé : utilisateur confirmé'; } else { echo 'pas utilisateur'; if (isset($_POST['remember'])) { setcookie('teste', 'moi', time() + 86400 /* Pour une journée */); } } ?> <html> <table width="650" border="0" align="center"> <tr> <td align="center"><font color="white">Veuillez entrer vos identifiants pour vous connecter:</font></td> </tr> <tr><td>&nbsp;</td></tr> <form action="?page=connexion" method="post"> <div align="center"></div> <table width="350" border="0" align="center"> <p align="center"> </p><tr> <td width="10%" class="alt1"><font face="Verdana" ><font color="white">*</font><font color="red"> Nom d'utilisateur :</font></td> <td align="left" width="10%" class="alt2"><input type="text" name="username" id="username" value="<?php echo htmlentities($ousername, ENT_QUOTES, 'UTF-8'); ?>" /></td> </tr> <tr> <td width="10%" class="alt1"><font face="Verdana" ><font color="white">*</font><font color="red"> Mot de passe :</font></td> <td align="left" class="alt2"><input type="password" name="password" id="password" /></td> </tr> <table width="350" border="0" align="center"> <tr><td>&nbsp;</td></tr> <tr><td><input type="checkbox" name="remember" value="1" /> <font color="white">Se souvenir de moi</font></td></tr> <tr><td>&nbsp;</td></tr> <table width="400" border="0" align="center"> <tr><td align="center"> <input type="submit" value="Connexion" /> </td></tr> </form> </div> </table> <?php } } ?> </td> <td align="right" valign="top" style="background-image:url(./images/cat_right.jpg)"><img src="./images/cat_right.jpg" style="width:46px; height:22px;" border="0" /></td> </tr> </table> <table style="width:100%; height:24px;" border="0" cellpadding="0" cellspacing="0"> <tr> <td style="width:125px; height:151px;" valign="top"><img src="./images/cat_down_left.jpg" style="width:125px; height:151px;" alt="" border="0" /></td> <td width="100%" valign="top" style="background-image:url(./images/cat_down_bk.jpg)" align="left">&nbsp;</td> <td style="width:258px;" align="right" valign="top"><img src="./images/cat_down_right.png" style="width:258px; height:151px;" alt="" border="0" /></td> </tr> </td> </tr> </table></html></body>

Re: Probleme cookies

Posté : 18 déc. 2011, 10:37
par Ryle
setcookie() définit un cookie qui sera envoyé avec le reste des en-têtes. Comme pour les autres en-têtes, ils doivent être envoyés avant toute autre sortie. Cela veut dire qu'il te faut appeler cette fonction avant tout envoi de code au navigateur (balise html, espaces, ou retours à la ligne).

Il faudrait donc déplacer ton bloc qui définit le cookie dans le bloc php que tu as en haut de ton script :
<?php
include('config.php');
// code à inclure ici par ex.
?>

Re: Probleme cookies

Posté : 18 déc. 2011, 11:00
par zerodegre
donc j'ai deplacé vers le haut comme tu ma dit mais la j'ai une belle erreur
comme ceci

<?php
include('config.php');
if (!empty($_COOKIE['teste']))
{
  echo 'cookie bien arrivé : utilisateur confirmé';
}
else
{
  echo 'pas utilisateur';
  if (isset($_POST['remember'])) {
    setcookie('teste', 'moi', time() + 86400 /* Pour une journée */);
  }
}

?>
pas utilisateur

Warning: Cannot modify header information - headers already sent by (output started at C:\Program Files (x86)\VertrigoServ\www\site\header.php:36) in C:\Program Files (x86)\VertrigoServ\www\site\espace_membre\connexion.php on line 11

Re: Probleme cookies

Posté : 18 déc. 2011, 12:01
par Ryle
Je n'ai pas fait attention mais la encore c'est parce que tu envois des données au navigateur avant de faire le set cookie :
  //   echo 'pas utilisateur'; --> il faut virer ce echo ou le déplacer après le setcookie
  if (isset($_POST['remember'])) {
    setcookie('teste', 'moi', time() + 86400 /* Pour une journée */);
    echo 'cookie ajouté, il sera disponible au prochain chargement de la page';
  }
Et euh... quand tu ouvres la page, tu as bien l'attribut "remember" qui est envoyé en post ?

En principe comme ça tu devrais pouvoir définir le cookie... restera plus ensuite qu'à l'utiliser quand tu le trouves et que l'utilisateur n'est pas connecté :)

Re: Probleme cookies

Posté : 18 déc. 2011, 12:13
par zerodegre
Je n'ai pas fait attention mais la encore c'est parce que tu envois des données au navigateur avant de faire le set cookie :
  //   echo 'pas utilisateur'; --> il faut virer ce echo ou le déplacer après le setcookie
  if (isset($_POST['remember'])) {
    setcookie('teste', 'moi', time() + 86400 /* Pour une journée */);
    echo 'cookie ajouté, il sera disponible au prochain chargement de la page';
  }
Et euh... quand tu ouvres la page, tu as bien l'attribut "remember" qui est envoyé en post ?

En principe comme ça tu devrais pouvoir définir le cookie... restera plus ensuite qu'à l'utiliser quand tu le trouves et que l'utilisateur n'est pas connecté :)

j'ai rectifié par ta commande mais toujours cette satané erreur et le cookie n'est pas créer, je commence a perdre espoire j'ai retourner le probleme de partout arfffff

Re: Probleme cookies

Posté : 18 déc. 2011, 21:53
par zerodegre
bon voila apres pas mal de recherche je viens de me rendre compte que en mettant le code ci dessous dans le HEADER.PHP il ecrit bien le cookies mais le probleme maintenant et que lorsque je ferme firefox le cookies disparait.Pourquoi donc il ne laisse pas la session ouverte des la fermeture de firefox ?


voici le bout de code que jai mit dans le header.php et je n'est rien mit dans la page connexion.php


<?php
//On demarre les sessions pour l'espace membre
session_start();


if (isset($_POST['remember'])) {
setcookie('site', 'teste', (time() + 3600));
}

echo $_COOKIE['site']; 

Re: Probleme cookies

Posté : 19 déc. 2011, 10:17
par xTG
Tu parles bien du cookie et non de la session ?
Car les cookies de session sont détruits à la fermeture du navigateur firefox (c'est un comportement normal du navigateur), par contre les autres ne le sont pas tant qu'ils sont valides.