Perte de sessions PHP

Résolu/Fermé
Deltod Messages postés 8 Date d'inscription mardi 20 février 2007 Statut Membre Dernière intervention 1 septembre 2009 - 1 sept. 2009 à 15:29
Smoking bird Messages postés 870 Date d'inscription mardi 11 mars 2008 Statut Membre Dernière intervention 10 juillet 2011 - 1 sept. 2009 à 17:44
Bonjour à tous,
Je cherche depuis des heures une solution à mon problème, que ce soit sur ce forum ou sur google, et malheureusement, même si le problème de perte des sessions est assez fréquent, aucune réponse ne correspond exactement à mon problème.
Mon problème est très simple à expliquer et pourtant ironiquement très compliqué à résoudre (du moins pour moi).
Je taf actuellement sur un site directement via le serveur et non en local, et les sessions ne s'enregistrent plus, le membre se connecte, la page connexion.php est appelée, si les identifiants sont corrects alors les sessions sont enregistrées. Voilà ce qui nous intéresse sur la page connexion.php :

<?php
session_start();
if (isset($_SESSION['membre_id']))
{
	echo 'Vous êtes déjà connecté !';
	exit();
}
else
{
	if (isset($_POST['pseudo']))//C'est qu'on a validé le formulaire
	{
		$retour = mysql_query("SELECT COUNT(*) AS existe FROM membres WHERE membre_pseudo = '".mysql_real_escape_string($_POST['pseudo'])."'") or die(mysql_error());
		$donnees = mysql_fetch_array($retour);
		if ($donnees['existe'] == 0)//le pseudo n'existe pas
		{
			echo 'Pseudo inconnu. Votre compte n\'a peut-être pas encore été validé<br />';
		}
		else if ($donnees['existe'] != 0)//le pseudo existe, on vérifie donc le mot de passe
		{
			$reponse = mysql_query("SELECT * FROM membres WHERE membre_pseudo = '".mysql_real_escape_string($_POST['pseudo'])."'");
			$resultat = mysql_fetch_array($reponse);
					
			if ($resultat['membre_mdp'] == $_POST['mdp'])//le mot de passe est bon
			{
				echo 'Connexion réussie.';
				$_SESSION['membre_pseudo'] = $_POST['pseudo'];
				$_SESSION['membre_mdp'] = $_POST['mdp'];
				$_SESSION['membre_id'] = $resultat['membre_id'];
				
				if(isset($_POST['cookie']) && $_POST['cookie'] == 'on')
						{
							//setcookie('membre_id', $result['membre_id'], time()+365*24*3600);
							//setcookie('membre_mdp', $result['membre_mdp'], time()+365*24*3600);
						}
				?><a href="<?php echo $pre;?>profil<?php echo $suf;?>">Accéder à mon profil</a>';<?php		
			}
			else if ($resultat['membre_mdp'] != $_POST['mdp'])//le mot de passe est faux
			{
				echo 'Mot de passe erroné.';
			}
		}
	}
}
?>

Lorsque je fais un test sur ces sessions en tout fin de page, aucun problème, elles sont toutes bien déclarées. Confiant, je clique donc sur le lien "Accéder à mon profil" qui mène vers la page profil.php.

Seulement voilà, c'est là que les ennuies commencent, je fais un test sur ma page profil.php juste après le session_start(), et mes variables de sessions sont vides sur n'importe quel navigateur, mais pas sur le firefox d'un ami ! J'ai alors fait un test sur d'autre navigateur d'autre de mes amis, et ça bug, les variables de sessions sont effacées aussi. Pourtant j'accepte tous les cookies sur tous mes navigateurs...Incompréhensible...
Voilà le bout de code qui nous intéresse sur la page profil.php :

<?php
session_start();
echo '$_SESSION[\'membre_pseudo\'] = '.$_SESSION['membre_pseudo'].''; //ici rien ne s'affiche, les variables de sessions ont été vidé...
/******SCRIPT D'AFFICHAGE SOIT DES CHAMPS DE CONNEXION SI LE MEMBRE N'EST PAS CONNECTE, SOIT DE SON PSEUDO POUR ACCEDER A SON PROFIL S'IL L'EST*****/
if (isset($_SESSION['membre_pseudo']))//le membre est déjà connecté
	{
		//On affiche donc simplement la possiblité de voir le profil, et de se deconnecter
		?><strong style="font-weight: bolder;
"><a href="<?php echo $pre;?>profil<?php echo $suf;?>"><?php echo $_SESSION['membre_pseudo'];?></a></strong> | 
		<a href="<?php echo $pre;?>deconnexion<?php echo $suf;?>">Deconnexion</a><?php
	}
	  else //le membre n'est pas connecté, on affiche donc le formulaire de connexion
	{
	?>
		<form action="<?php echo $pre;?>connexion<?php echo$suf;?>" method="post" name="login">

		<span class="quick" style="display: block;">
	
	
				
				
		<span class="login">
		
						
			<span class="username">
				<label for="pseudo">Pseudo : </label><input type="text" name="pseudo" size="10" id="pseudo" />
			</span>
			
			<span class="password">
				<label for="mdp">Mot de passe : </label><input type="password" name="mdp" size="10" id="mdp" />
			</span>
				<input type="submit" value="Connexion" />
			
			
		</span><?php
	}
/*****FIN DU SCRIPT D'AFFICHAGE*****/

/*****DEBUT SCRIPT POUR AFFICHER LA PAGE PROFIL CORRESPONDANT AU PROFIL DU MEMBRE*******/
if (isset($_POST['id']))
{
	$id = $_POST['id'];
}
else
{
	if($_GET['id'] == '') //s'il n'y a pas d'id, on affiche la page du membre connecté...
	{
			if(isset($_SESSION['membre_id'])) $id = $_SESSION['membre_id'];
			else $id = -1;
	}
	else if($_GET['id'] != '') $id = $_GET['id'];
}
//echo '$_GET[\'id\'] après = '.$_GET['id'].'';
$retour = mysql_query('SELECT * FROM membres WHERE membre_id=\'' . $id . '\'')  or die(mysql_error());
$profil = mysql_fetch_array($retour);
$retour2 = mysql_query("SELECT COUNT(*) as nombre FROM amv WHERE amv_auteur='".$profil['membre_pseudo']."'") or die(mysql_error()); //requête pour compter le nombre d'amv fait par le membre
$nombre = mysql_fetch_array($retour2);
if($profil['membre_id'] == '' || $id == -1)
{
        ?><p>Page membre inconnue</p><?php
		exit();
}
?>

Et donc je reçois toujours le message "Page membre inconnu" car les variables de sessions sont vides. Du coup les champs de connexion réapparaissent aussi, les sessions étant vides, c'est comme si j'étais déconnecté...

Bref je ne comprends rien à ce problème, c'est peut-être quelque chose de tout bête, mais si quelqu'un pouvait éclairer ma lanterne, je lui en serai très reconnaissant :).
Configuration: Windows Vista
Firefox 3.5.2
</code>            
                

7 réponses

Smoking bird Messages postés 870 Date d'inscription mardi 11 mars 2008 Statut Membre Dernière intervention 10 juillet 2011 58
1 sept. 2009 à 15:52
que te retourne print_r($_SESSION) ?
0
Deltod Messages postés 8 Date d'inscription mardi 20 février 2007 Statut Membre Dernière intervention 1 septembre 2009
1 sept. 2009 à 16:05
Bien pas grand chose justement...
Voilà ce que ça me renvoie : Array()
Preuve que les sessions sont bel et bien vides...
0
Smoking bird Messages postés 870 Date d'inscription mardi 11 mars 2008 Statut Membre Dernière intervention 10 juillet 2011 58
1 sept. 2009 à 16:24
et session_id() sur tes pages?

d'autres parts j'ai constaté que tu mettais le mdp en session, je ne te le recommande pas, c'est moyen pour la sécurité (vols de session, pratique assez courante)

j'ai eu un soucis similaire, mais je sais plus comment je l'ai réglé. Vérifie tes paramètres de session sur ton hébergeur, et plante session_start dans toutes tes pages, tout en haut, avant même la DTD
0
Deltod Messages postés 8 Date d'inscription mardi 20 février 2007 Statut Membre Dernière intervention 1 septembre 2009
1 sept. 2009 à 16:44
session_id() n'affiche rien du tout sur les deux pages en questions...
J'ai essayé un script tout simple pour tester les sessions, et rien n'y fait, elles ne sont pas enregistrées quand je travaille directement sur le serveur. Par contre en local tout fonctionne, ça signifierai que c'est peut-être un problème de configuration de php.ini, mais dans ce cas comment expliquer le fait que ça fonctionnait parfaitement avant, et que ça fonctionne chez un ami à moi sur son Firefox à lui ?
Je suis chez 1&1 et il me disent qu'il faut que je crée moi même le php.ini, seulement je n'y connais rien, et je ne connais absolument pas les instructions à indiquer pour faire fonctionner les sessions...
Merci de ton aide en tout cas.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Smoking bird Messages postés 870 Date d'inscription mardi 11 mars 2008 Statut Membre Dernière intervention 10 juillet 2011 58
1 sept. 2009 à 17:14
hum j't'en prie, mais j'me sens assez inutile sur le coup :D

1&1? j'te recommanderais de déménager ;) y'a pas pire réputation. Normalement tu peux accéder au php.ini de ton local (si tu es avec wampserver par exemple c'est assez facile), il y a un paramètre session.auto_start et un paramètre session.max_lifetime si mes souvenirs sont bons, il faut que tu mettes session.auto_start sur 1 et l'autre en principe t'es pas obligé de le modifier.

Le coup de firefox, c'est le plus étrange. Normalement les sessions n'ont pas grand rapport avec les navigateurs, mais il est possible que firefox ait une configuration spéciale pour les sauvegarder...

A la réflexion, je sais que quand firefox redémarre, les sessions sont conservées, ce qui n'est pas le cas des autres navigateurs, et qui m'a toujours paru étrange. Ca me semble donc plus ou moins cohérent.

Ca, il semblerait que ce soit le fichier php ini http://cvs.php.net/viewvc.cgi/php-src/php.ini-dist?view=co
la dernière version^^

Récupère le, créé le, cherche session.auto_start et mets 1, puis upload le ^^
0
Deltod Messages postés 8 Date d'inscription mardi 20 février 2007 Statut Membre Dernière intervention 1 septembre 2009
1 sept. 2009 à 17:21
Merci beaucoup :) !
J'ai finalement trouvé sur un autre forum une configuration "de base" des sessions pour le php.ini.
Je suis aller faire un tour dans la FAQ de 1&1 et j'ai donc trouvé comment créer le fichier. Ceci étant fait, j'ai vu apparaitre des erreurs que je ne voyait pas avant, à sa voir des erreurs du type "Header already sent" indiquée sur ma ligne 2 alors que le début de mon script est :
<?php
session_start

Je comprenais pas trop du coup, et je suis aller voir sur un autre forum, et j'ai vu quelque chose d'intéressant, apparemment l'encodage en UTF8 créerai des soucis d'interprétation pour les navigateurs, qui y verraient donc là des caractère envoyé entre le <?php et le session_start.
La solution était donc de convertir toutes mes pages en ANSI via Notepad, et le problème est réglé !
Merci beaucoup à toi donc ;). Tu m'a permis indirectement de résoudre mon problème.
0
Smoking bird Messages postés 870 Date d'inscription mardi 11 mars 2008 Statut Membre Dernière intervention 10 juillet 2011 58
1 sept. 2009 à 17:44
cool :) (j'avais écrit un autre message que CCM n'a pas enregistré:s)
0