Probleme cookies

Eléphant du PHP | 57 Messages

17 déc. 2011, 09:56

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
	}
}
?>
Modifié en dernier par zerodegre le 17 déc. 2011, 11:22, modifié 2 fois.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

17 déc. 2011, 11:12

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... ;)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 57 Messages

17 déc. 2011, 11:15

merci de ta reponse mais quelle commande pour venir lire ?

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

17 déc. 2011, 11:22

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 :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 57 Messages

17 déc. 2011, 11:36

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'];
}


?>


Eléphant du PHP | 57 Messages

17 déc. 2011, 12:14

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'];

}
?>

ViPHP
ViPHP | 1996 Messages

17 déc. 2011, 14:35

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 */);
  }
}
It is nice to be important but it is more important to be nice
http://www.aureuswebfactory.fr

Eléphant du PHP | 57 Messages

18 déc. 2011, 00:12

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>

Eléphant du PHP | 57 Messages

18 déc. 2011, 01:20

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>

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

18 déc. 2011, 10:37

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.
?>
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 57 Messages

18 déc. 2011, 11:00

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

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

18 déc. 2011, 12:01

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é :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 57 Messages

18 déc. 2011, 12:13

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

Eléphant du PHP | 57 Messages

18 déc. 2011, 21:53

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']; 

ViPHP
xTG
ViPHP | 7331 Messages

19 déc. 2011, 10:17

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.