FREE et les sessions

Eléphanteau du PHP | 13 Messages

09 juil. 2007, 12:39

Bonjour,

J'ai un petit probleme sur mon site, et jme casse la tete dessus depuis un bon moment.
Il faut savoir que tout marche très bien sous easyPHP 1.8

1 - Donc quand un utilisateur se connecte sur mon site, j'initialise des variables de sessions comme $_SESSION['pseudo'] ou $_SESSION['avatar'].
Dans mon menu, j'affiche ces variables pour que le membre voit son nom et son avatar sur le site. Tout se passe très bien, sur toutes les pages du site, que ce soit en local ou chez mon hebergeur FREE

2 - Dans ma partie admin, j'ai la possibilité d'éditer les profils des membres, et la probleme inexplicable. Sur une page, j'affiche dans un formulaire les données du membre à editer (pseudo, avatar, etc...). Quand j'envoie les données modifiées, le membre a bien été modifié, mais MES variables de sessions également ! C'est a dire que dans mon menu, au lieu de voir MON pseudo, je vois celui du membre modifié, et je vois aussi SON avatar. En fait, tout ce qui a été envoyé par formulaire a également modifié mes variables de session.
Or mes variables de sessions ne s'initialisent qu'une seule fois : quand je me connecte...

La je capte pas, j'ai pas le probleme sous easysphp...

Qq a t'il une idée ?
Merci

Mammouth du PHP | 959 Messages

09 juil. 2007, 13:02

essaye de créer un dossier nommer sessions à l'index du ftp, donc à /
:wink: free, pour l'hébergement, c'est un peut spécial, c'est la première chose qu'il faut faire quand on cré un ftp free.... :wink:

Eléphanteau du PHP | 13 Messages

09 juil. 2007, 13:14

Merci de ta réponse, mais j'ai déjà créé le dossier en question, mes sessions ne marcheraient pas sans ca... :)

J'ai fait un autre test c'est encore pire, il suffit qu'un lien ai dans l'adresse un autre pseudo, et PAF ma variable de session saute et prend la valeur du pseudo passé dans l'adresse.

C'est à se casser la tete contre les murs...

Mammouth du PHP | 959 Messages

09 juil. 2007, 13:43

ben montre nous ton code..... :wink:

Eléphanteau du PHP | 13 Messages

09 juil. 2007, 14:29

Ok je montre les parties concernées :

Lien : membres.php?membre=XXXX&action=consulter

Page membres :
// On récupère le pseudo
	if (isset($_GET['membre'])) {
		$pseudo = mysql_real_escape_string($_GET['membre']);
		$req_pseudo = mysql_query ('SELECT membre_id FROM membres WHERE pseudo = "'.$pseudo.'"');
		if ($data_pseudo = mysql_fetch_assoc($req_pseudo)) $id_membre = $data_pseudo['membre_id'];
		else $id_membre = 0; }
	
	switch($action) {
		// Consultation
		case 'consulter':
			// On récupère les infos
			$req1 = mysql_query('SELECT pseudo, avatar, email, msn FROM membres WHERE membre_id='.$id_membre.'');
			if ($data1 = mysql_fetch_assoc($req1)) {
				//On affiche les infos sur le membre ?>
				<table><tr>
					<td><label>Pseudo : </label><strong><?php echo htmlentities($data1['pseudo']); ?></strong></td></tr><tr>
					<td><label>Adresse e-mail : </label><?php echo '<a href="'.htmlentities($data1['email']).'">'.htmlentities($data1['email']); ?></a></td></tr><tr>'
					<td><label>Adresse MSN : </label> <?php	echo '<a href="'.htmlentities($data1['msn']).'">'.htmlentities($data1['msn']); ?></a></td></tr><tr>
					<td><label>Avatar : </label> <?php	echo '<img src="'.htmlentities($data1['msn']); ?>" /></a></td>
				</tr></table>
			} 
			else echo '<br /><div class="center">Ce membre n\'existe pas !</div>';
		break;

La page dans mon menu :
// Utilisateur identifié, affichage de ses informations
		echo 'Bonjour '.htmlentities($_SESSION['pseudo']).'<br />';
		echo '<img src="'.htmlentities($_SESSION['avatar']).'" width="100" height="100" />';
		echo '<br /><a href="membres.php?membre='.htmlentities($_SESSION['pseudo']).'&action=modifier">Mon compte</a>';
		echo '<br /><a href="deconnexion.php?page_redirection=news.php">Deconnexion</a>'; 

Mammouth du PHP | 959 Messages

09 juil. 2007, 14:33

eum.... il y a t-il :
<?php session_start(); ?>
au tout début de tes pages ?

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

09 juil. 2007, 14:36

eum.... il y a t-il :
<?php session_start(); ?>
au tout début de tes pages ?
Je dirais même, au tout début de TOUTES tes pages .... ;)
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Mammouth du PHP | 959 Messages

09 juil. 2007, 14:36

ouai, comme sa, on ai sur :D

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

09 juil. 2007, 14:39

ouai, comme sa, on ai sur :D
Oh mon dieu ... :(
Ouais, comme ça, on est sûr
6 mots, 4 fautes
Je suis pas un dieu en orthographe et il m'arrive (souvent) de faire des coquilles, mais là, ça pique les yeux :cry:
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Eléphanteau du PHP | 13 Messages

09 juil. 2007, 14:45

oui je vous rassure, session_start(); est bien dans TOUTES mes pages :)
tout marche tres bien sous easyPHP, il n'y a juste que sous FREE que ca merde au niveau des variables de session qui sautent, mais seulement quand des variables "identiques" sont passées par POST ou GET (genre une variable $pseudo, alors que ma variable de session est $_SESSION['pseudo'])

Vous pensez qu'il vaut mieux avoir des noms uniques ? genre $_SESSION['nom_pseudo']
Peut etre que ca créé des conflits non ?

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

09 juil. 2007, 14:52

Effectivement, il me semble que le register_global est activé chez free et il est très possible que, pour l'index 'toto', si tu as une variable en GET, en POST et en SESSION que le GET écrase tout :-k

Essaye de changer pour utiliser un index non utilisé ailleurs ;)
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

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

09 juil. 2007, 14:54

Il y a un paramétrage chez free (je ne sais pas si c'est lié au register global à ON ou si c'est un paramétrage supplémentaire) faisant une espèce de session_register() sur chaque variable que tu utilises en session, ainsi : $_SESSION["maVariable"] et $maVariable vont pointer sur la même adresse mémoire et donc une valeur commune.

Ainsi, si utilises $maVariable ou que tu la modifies, cela va automatiquement modifier la valeur de $_SESSION["maVariable"]. Il vaut donc mieux utiliser des noms de variables différentes pour eviter ce conflit.

Personnellement j'ai pris l'habitude de préfixer d'un "s" les variables que j'utilises dans mes sessions (et d'un "c" pour les cookies :)). Ainsi dans mon code je manipule "pseudo" et en session j'ai "sPseudo" :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphanteau du PHP | 13 Messages

09 juil. 2007, 15:13

Ok merci, ca doit etre un truc comme ca :)
Bon j'essaie ce soir, je peux pas uploader mes sources du boulot, et je vous dis ca demain :)

Merci pour votre aide !

Mammouth du PHP | 959 Messages

09 juil. 2007, 18:12

ouai, comme sa, on ai sur :D
Oh mon dieu ... :(
Ouais, comme ça, on est sûr
6 mots, 4 fautes
Je suis pas un dieu en orthographe et il m'arrive (souvent) de faire des coquilles, mais là, ça pique les yeux :cry:
eu... mouai..
pour le "ouai", c'est pas trop une faute, puisque c'est pas trop un mot :lol: pour l'acent sur le "u", je le sais... et si je te dit que je suis sous un clavier qwerty ? :lol: :lol: , je ne suis pas sous un qwerty mais... la flème de faire l'accent :langue: :lol:
et... après tout, il y a pire ! :) moi, c'est pas volontaire.... :P

Eléphanteau du PHP | 13 Messages

09 juil. 2007, 19:09

bon bah c'etait ca !

merci beaucoup :)