8791 sujets

Développement web côté serveur, CMS

Bonjour,

Voilà ça fait plusieurs heures que je tourne en rond au sujet de la gestion de cookies auto-générés par la fonction setcookie afin de permettre aux utilisateurs de mon site de rester connecté même après avoir fermé le navigateur. (jusque là tout va bien...quoique...)

Le fait est que juste après avoir utilisé cette fonction (dans une page vierge de html), les cookies apparaissent comme étants présents quand je les interroge via $_COOKIE['mavariable'], mais quand je redirige l'utilisateur sur cete meme page via la page index de mon site, en interrogeant la même variable il apparait qu'elle n'existe plus...

Pourquoi... T_T

Sachant que j'ai fais quelques test précédement et que tout marchait bien avant que je couple les cookies aux sessions afin d'automatiser la tâche...

Voici les script (un peu nettoyés pour être lisibles):

Le formulaire :

<?php
if(!isset($_SESSION['numero'])){ 
?>
<form name="" action="pages/traitlogin.php" method="post" />
	<table>
  		<tr>
    		  <td >E-mail:</td>
                  <td><input class="text" type="text" name="login" /> </td>
		</tr>
                <tr>
		  <td >Mot de passe :  </td>
    		  <td><input class="text" type="password" name="password" /></td>
                 </tr>    	
		<tr>
		  <td></td>
		  <td colspan="1"align="center">Se souvenir de moi <input type="checkbox" name="souvenir" value="1"/></td>
		</tr>
	</table>
</form>
<?php } ?>


Le traitement :

<?php
session_start();
  require_once "config.php";
  if(sizeof($_POST)>0){

         // 
        //verifications d'usage sur les champs
       //

if (isset($_POST['souvenir']) &&  isset($_SESSION['numero']))
	{
	$expire = time() + 365*24*3600;
	setcookie('numero', $_SESSION['numero'], $expire); 
	setcookie('genre', $_SESSION['genre'], $expire); 
	setcookie('nom', $_SESSION['nom'], $expire);
								
	echo $_COOKIE['numero'];
	echo $_COOKIE['genre'];
	echo $_COOKIE['nom'];
								
	echo '<a href="../accueil.php">redirection accueil</a>';
	} 
   }?>


Au dessus de la balise <html> de mon header.php :

<?php
session_start();	

echo $_SESSION['numero'].' - '.$_COOKIE['numero'];
	include('config.php');
	if (isset ($_COOKIE['numero']) && !isset ($_SESSION['numero']))
		{
			$_SESSION['numero'] = $_COOKIE['numero'];
			$_SESSION['genre'] = $_COOKIE['genre'];
			$_SESSION['nom'] = $_COOKIE['nom'];
		}
		
?>

Ici la variable $_COOKIE['numero'] ne s'affiche pas... et si quelqu'un pouvait me dire pourquoi ca m'arrangerais T_T

Je précise que j'ai pas mal cherché, que j'ai essayé d'eviter tous les pièges liés aux headers, que mon ami google m'a fait sauté plusieurs erreur, mais que j'ai fini par sécher à ce niveau...

Voilà merci d'avance

Modifié par Shin (18 Feb 2009 - 19:57)
Hello Shin,

je ne comprends pas bien ton code. Smiley murf

Tu n'affiches le formulaire que si $_SESSION['numero'] n'existe pas :
if(!isset($_SESSION['numero'])){ 
et pourtant tu ne fais ensuite le traitement que si $_SESSION['numero'] existe :
if (isset($_POST['souvenir']) &&  isset($_SESSION['numero']))
Donc soit ça se passe dans config.php soit il y a un problème. Smiley langue
Tout d'abord merci de ta reponse =)

Mais ne fais pas attention à cette verification, c'est juste que le formulaire est disponible lorsque l'utilisateur n'est pas encore connecté tout simplement, puisque qu'aucune variable de session n'a été encore créée via le formulaire de connexion.
Lorsqu'il se connecte un autre affichage prend le relais avec différentes info affichés pour lui, au lieu de réafficher le formulaire de connexion. =)

Bon je vais préciser un peu les chose car c'est vrai que c'est un peu flou pour l'instant :

-Donc dans un premier temps j'affiche le formulaire de connexion lorsqu'il n'y a pas encore de session créée

-Ensuite une fois le formulaire envoyé et la cache souvenir cochée, je traite la demande en créant une session et des cookies en correspondances a ces sessions.
(je précise que le tout marche même les cookies puisque j'ai testé un echo de toutes ces variables à la toute fin de mon traitement)

Enfin après redirection via lien ou autre (j'ai testé header() javascript et lien), je test si mes variables sont encores en vie : La session marche sans souci et s'affiche alors que le cookie a apparement disparu ! (je le redis, il s'affichait juste avant la redirection)

Voilà voila problème assez bizarre vous en conviendrez =/
Ah OK !

Eh bien du coup j'ai mieux regardé et il me semble que c'est parce que tu ne renseignes pas le path (voir la doc).

Il faudrait donc faire :
	setcookie('numero', $_SESSION['numero'], $expire, '/'); 
	setcookie('genre', $_SESSION['genre'], $expire, '/'); 
	setcookie('nom', $_SESSION['nom'], $expire, '/'); 
De cette façon tes cookies existent pour tout le site et pas seulement pour le répertoire pages et ses sous-répertoires.
Modifié par Heyoan (18 Feb 2009 - 21:39)
Oulahlah cette réponse m'a l'air d'être celle qui va me debloquer.

Effectivement après Nieme relecture de la doc, i lest bien précisé que le path par défaut est bien le répertoire courant uniquement...

Merci infiniment je ne pourrais tester que demain donc j'appliquerai la balise résolu à ce moment là.

Bonne soiré !

[EDIT] : Après test, il s'avère que ton conseil était le bon, je place donc la balise =) Merci encore !!

Modifié par Shin (19 Feb 2009 - 11:19)