Page 1 sur 1
FREE et les sessions
Posté : 09 juil. 2007, 12:39
par Artus
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
Posté : 09 juil. 2007, 13:02
par chrislabricole
essaye de créer un dossier nommer
sessions à l
'index du ftp, donc à
/

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....

Posté : 09 juil. 2007, 13:14
par Artus
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...
Posté : 09 juil. 2007, 13:43
par chrislabricole
ben montre nous ton code.....

Posté : 09 juil. 2007, 14:29
par Artus
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>';
Posté : 09 juil. 2007, 14:33
par chrislabricole
eum.... il y a t-il :
<?php session_start(); ?>
au
tout début de tes pages ?
Posté : 09 juil. 2007, 14:36
par zeus
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 ....

Posté : 09 juil. 2007, 14:36
par chrislabricole
ouai, comme sa, on ai sur

Posté : 09 juil. 2007, 14:39
par zeus
ouai, comme sa, on ai sur

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

Posté : 09 juil. 2007, 14:45
par Artus
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 ?
Posté : 09 juil. 2007, 14:52
par zeus
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
Essaye de changer pour utiliser un index non utilisé ailleurs

Posté : 09 juil. 2007, 14:54
par Ryle
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"

Posté : 09 juil. 2007, 15:13
par Artus
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 !
Posté : 09 juil. 2007, 18:12
par chrislabricole
ouai, comme sa, on ai sur

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

eu... mouai..
pour le "ouai", c'est pas trop une faute, puisque c'est pas trop un mot

pour l'acent sur le "u", je le sais... et si je te dit que je suis sous un clavier qwerty ?

, je ne suis pas sous un qwerty mais... la flème de faire l'accent
et... après tout, il y a pire !

moi, c'est pas volontaire....

Posté : 09 juil. 2007, 19:09
par Artus
bon bah c'etait ca !
merci beaucoup
