Gros probleme de session (RESOLU) MERCI à tous !!!

WRInaute discret
Salut à tous,

J'ai un problème très casse tête. Tout d'abord sachez que je n'ai pas le problème que je vais vous expliquez en local.

Je me log avec login et mdp sur le site. Au dessus de ma page,je vois que je suis connecté (mon lgin est affiché). Mais dès que je clique sur un des liens de mon menu, le user change. Je vois donc au dessus de la page que je suis non plus connecté sous "John" mais sous "Ju". J'ai affiché l'id de session en faisant echo session_id(); Et ce qui est bizarre c'est que l'id, lui, ne change pas !

Je n'y comprends rien. Je suppose que ça doit être du au serveur mais je suis pas sur. Que faire ??

D'avance merci à tous les courageux qui veulent bien m'aider.
 
WRInaute passionné
Tu te logues sur quoi? L'id ne change pas, par rapport à quoi?
...

Dis en plus car là c'est flou. Mais j'opte quand même pour une erreur de code.
 
WRInaute discret
Salut,

Je me log sur le site à l'aide d'un formaulaire html. J'entre login et mot de passe.

Pour ce qui est de l'id, je me disais que si mon user change, l'id de session aussi, non ?

En fait, à la base je n'utilise pas la fonction session-id(). Je met juste session_start(); en début de chaque page.
 
WRInaute passionné
Ton ID de session est lié à la session PHP. Te logguer sur un site, un forum, ... ne change pas l'ID de ta session (vu que c'est complètement différent).
 
WRInaute discret
ok mais donc comment cela se fait-il que le serveur ai gardé l'utilisateur en mémoire alors que je l'ai supprimmé de la base de données.

Je suis clair ou pas du tout ?

Merci
 
WRInaute passionné
Hello,

es tu certain que tes sessions soit régulièrement effacées ? La probabilité est mince, mais si tu tombes sur un ID de session utilisé il y a 4 mois et qu'il n'a jamais été effacé ça reste possible.

Mais cela voudrait également dire que tu ne fais strictement aucune vérification dans ton code, ce qui n'est pas prudent...
 
WRInaute discret
Salut ,

merci de ta réponse.

Que veux-tu dire par effacer les sessions ? Que devrais-je faire ??

Voivi en clair mon problème si je n'ai pas été assez clair désolé.

Je vais sur mon site : login et mdp. Je valide. Dans un endroit de ma page j'ai demandé à ce qu'il m'affiche le login s'il existe, sinon il marque connexion.

Donc quand je me connecte (mon login est jhon) je vois bien :

John|Déconnexion Id session : r06tm37rkuj4f5sv06u0b6p095

Mais dès que je clique sur le moindre lien hypertexte: voici ce qu'il m'affiche :

Ju|Déconnexion Id session : r06tm37rkuj4f5sv06u0b6p095

Il a donc changé d'utilidateur sans que je ne demande rien.
J'ai beau me connecter avec le user que je veux, dès que je clique sur un lien, il switch vers "Ju".

Et d'ailleurs, d'où mémorise-t-il ces informations. J'ai pourtant supprimmé le user "Ju"dans la BDD pour être sur.

Une idée.

Merci bcp.

John :D
 
WRInaute impliqué
Juste après t'être connecté en "john"

tu compares l'id de session qui est inscrit dans la page
et l'id de session contenu dans le cookie
(sous firefox tu peux voir le contenu du cookie)

s'ils sont différents, ton session_start n'arrive pas à écrire le cookie qui va bien

et sinon selon php.net
Note: Si vous utilisez des sessions basées sur les cookies, vous devez appeler session_start() avant d'afficher quoi que ce soit au navigateur.

voila une piste si tu utilises les cookies pour passer l'identifiant de session
 
WRInaute discret
Salut,

Merci de ta réponse.

Les deux id de session sont les mêmes.

Et j'ai des session start() sur toutes les pages avant d'afficher quoi que ce soit au navigateur.

Une autre idée. Je sais que le problème est difficile.

Merci à tous.

John
 
WRInaute passionné
Bah sans voir ton code de connexion difficile de répondre. Soit tu affiches un nom qui est en cookie et qui n'est pas effacé (supprime les cookies de ton navigateur pour tester) soit ton code a un gros bug.
 
WRInaute accro
Bonjour
Ca m'est arrivé également lors du dev de mon www.
Ce qui se passait chez moi :

. ma variable de session était $_SESSION['id_user']=11, par exemple

. dans certaines pages traitant d'un autre membre, je définissais ue variable $id_user=18, par exemple

. chose étrange, ma variable de session $_SESSION['id_user'] prenait alors la valeur de $id_user lorsque je visitais la dite page.

Je me trimbalais donc avec un identifiant en session qui ne correspondait plus à mon propre compte.

Ce que j'ai fait : j'ai évité d'utiliser la variable $id_user, j'ai utilisé $id_user2 et hop plus de problèmes.
 
WRInaute discret
MA PAGE DE CONNEXION

Code:
<?php

include_once 'fonctions.php';

if (isset($_SESSION['username'])){

include "redir_logok.php";
exit();
}
else{
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" >
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/>
</head>

<body>

<!---------------------------------------------------------------------------------------------------------->
<h1>Formulaire de connexion</h1>
<form  action="index.php?page=5555" method="post">

<table border="0">

<tr>
<td><label>Nom d'utilisateur :</label></td>
<td><input type="text" name="Username" MAXLENGTH="20"></td>

</tr>

<tr>
<td><label>Mot de passe :</label></td>
<td><input type="password" name="Password" MAXLENGTH="20"></td>

</tr>

</table>

<br/>
<br/><br/>
<input type="submit" value="Valider" size="20"> 
</form><br/><br/>

<!------------------------FIN PHP------------------------------->
<?php } ?>

</body>

</html>

MA PAGE DE VERIFICATION

Code:
<?php
session_start();
include_once 'fonctions.php';


    $Username = htmlentities($_POST['Username'], ENT_QUOTES); 
    $Password = htmlentities($_POST['Password'], ENT_QUOTES);
    $Password_md5 = md5($Password);
	
	connexion_DB('amispher_main');
	
	$reqlog = mysql_query("SELECT * FROM personne WHERE Username='$Username' AND Password='$Password_md5'")or die(mysql_error());
	$log=mysql_num_rows($reqlog);//on compte le nombre de ligne et ON met ce nombre dans la VARIABLE $log
	$info_user=mysql_fetch_array($reqlog);

  
   if ($log==1){
$_SESSION['Username'] = $info_user['Username'];
$_SESSION['Nom']=$info_user['Nom'];
$_SESSION['Prenom']=$info_user['Prenom'];

require "redir_logok.php";
}
elseif ($log==0)
{
echo"</br><span class='Texte_04'>Login ou mot de passe incorrect !!</span>";
session_destroy();
require "connexion.php";
}
deconnexion_DB();




?>

Ah oui, autre infos qui peut etre utile, quand je fais :
Code:
print_r($_SESSION) ;

J'ai ceci :
Code:
Array
(
    [Username] => Ju
    [Nom] => Housieaux
    [Prenom] => Jonathan
)

Le Usernale ne correspond pas aux champs Nom et prénom dans ma BDD. Le Username devrait être John


Encore merci à tous pour votre aide
 
WRInaute accro
nickargall a dit:
Bonjour
Ca m'est arrivé également lors du dev de mon www.
Ce qui se passait chez moi :

. ma variable de session était $_SESSION['id_user']=11, par exemple

. dans certaines pages traitant d'un autre membre, je définissais ue variable $id_user=18, par exemple

. chose étrange, ma variable de session $_SESSION['id_user'] prenait alors la valeur de $id_user lorsque je visitais la dite page.

Je me trimbalais donc avec un identifiant en session qui ne correspondait plus à mon propre compte.

Ce que j'ai fait : j'ai évité d'utiliser la variable $id_user, j'ai utilisé $id_user2 et hop plus de problèmes.

Ce qui est selon moi dû au fait que sur ton serveur de dev, tu es en register globals on.
 
WRInaute passionné
nickargall>Ton soucis c'est que tu as l'option PHP (dont j'ai oublié le nom) qui fait en sorte que les variable globale soit accessible par $id_user, donc en gros $_GET['id_user'] et les autres (SESSION, POST, ...).

Et je pense que hx.jonathan devrait regarder de ce coté.

Et aussi faire attention car $_SESSION['username'] et $_SESSION['Username'] c'est pas la même variable.
 
WRInaute accro
UsagiYojimbo a dit:
Ce qui est selon moi dû au fait que sur ton serveur de dev, tu es en register globals on.

Bacteries a dit:
nickargall>Ton soucis c'est que tu as l'option PHP (dont j'ai oublié le nom) qui fait en sorte que les variable globale soit accessible par $id_user, donc en gros $_GET['id_user'] et les autres (SESSION, POST, ...).
Tout à fait. Simplement plutôt que d'aller bouger la config de l'hébergement, j'ai préféré bouger mon code, comme ça plus de confusion possible.
 
WRInaute discret
Alors,

J'ai testé mon site sur un serveur mutualisé que j'ai chez OVH. Le problème était le même. Mais c'était parce que le REGISTER GLOBAL apparemment est à ON par défaut chez eux.

J'ai donc utilisé un .htaccess avec :

Code:
SetEnv REGISTER_GLOBALS 0
SetEnv ZEND_OPTIMIZER 1
SetEnv MAGIC_QUOTES 1
SetEnv PHP_VER 5

Directement ça a été.

Comme ça allait, je suis retourné sur le serveur final sur lequel je veux mettre mon site en ligne. J'ai également utilisé ce fichier .htaccess. Mais ça ne marche pas. A noter qu'il s'agit du serveur d'un amis. Un serveur securisé. Peut-être ne puis-je pas modifier la valeur de la REGISTER GLOBAL avec ce .htaccess ???

D'autres suggestions ?


John :D
 
WRInaute passionné
Ou bien dans ton .htaccess :
Code:
php_flag register_globals off

Mais si ça fonctionne, c'est que le serveur n'est pas sécurisé non.
 
WRInaute discret
Ah oui,

J'ai mis ce code dans ma page afin de voir ce que ça contenait.

Code:
Array
(
    [Username] => Ju
    [Nom] => Housieaux
    [Prenom] => Jonathan
)


J'ai pu observer que lorsque je me connecte il Met Username à John pendant un petit instant puis rebascule à Ju.

Ca vous aide ??

PS: j'ai testé avec php_flag register_globals off mais marche pas!
 
WRInaute accro
Tu dois avoir dans le code un truc qui définit
$username="Ju";
c'est sans doute celà qui met le souk avec ta variable $_SESSION['username'].

Ma solution : change $username, appelle la $user_name et t'auras plus ce genre de soucis.
 
WRInaute discret
Sorry , :D


print_r($_SESSION) ; c'est ca que j'avais mis dans ma page pour voir.

Pour répondre à ta question, nickargall, je n'ai aucune variable qui reprends "Ju". Je vais simplement vérifier dans ma BDD si la combinaison username et mdp existent sur une ligne. Si c'est le cas, je remplis mes variables de sessions.

Pour mon problème, c'est comme s' il allait bien chercher les infos mais qu'il me remplaçait immédiatement le username par Ju d'office. Le plus drôle, c'est que j'ai beau me connecter avec un autre couple username mdp, il me remets à chaque fois username à "Ju" mais les autres données (nom , prénom etc.) sont quan a elles bonnes.


En résumé,si je me connecte sous "john", la fonction print_r($_SESSION) ; me renvoi:


Code:
Array
(
    [Username] => Ju ****ICI EST LE PROBLEME !*****ça devrait être john et non "Ju" !
    [Nom] => Housieaux
    [Prenom] => Jonathan
)

Là je suis clair ??

Désolé pour cet épineux problème. :?
 
WRInaute accro
t'as pas un cookie quelquepart sur ton pc qui prend ensuite le pas sur la $_SESSION['username'] ou un truc comme ça ?

il se passe quoi sur ton site entre le script qui écrit les variables de session et ton print_r($_SESSION) ?
 
WRInaute discret
Ceci va peut etre t'aider à m'aider:

Voici le hiérarchie du site.

Page accueil du serveur :

lien 1
lien2
lien VERS MON SITE
lien3

Ce serveur est sécurisé donc je dois entrer un login et un mot de passe pour voir la petite hiérarche ci-dessus.

Ensuite je peux cliquer sur MON SITE et arriver sur ma page d'accueil.

Cela veux donc dire que le serveur crée déjà une variable de session avant même que je me sois connecté sur mon site.


Pour répondre à ta question:

Ben losrque j'entre username et mdp sur MON site, il vérifie ce couple dans la base de données . S'il existe j'ai ceci qui me redirige :

Code:
require "redir_logok.php";

Voici le code de cette page de redirection :

Code:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/>
<META http-EQUIV="Refresh" CONTENT="0; url=index.php?page=01">
</head>
<body>



</body>
</html>

John[/b]
 
WRInaute accro
et donc concretement, il se passe quoi sur ton site entre le script qui écrit les variables de session et ton print_r($_SESSION) ? :)

Tu es sur de ne pas avoir un bout de code PHP qui déclare une valeur à la variable $username quelquepart ?
 
WRInaute discret
En fait, j'avais ceci dans ma page de vérification de login et mdp :

Code:
   if ($log==1){
$_SESSION['Username'] = $info_user['Username'];
$_SESSION['Nom']=$info_user['Nom'];
$_SESSION['Prenom']=$info_user['Prenom'];

Donc j'ai le même nom pour les deux variables.

J'ai essayé en changeant $_SESSION['Username'] par $_SESSION['User'] dans toutes mes pages et ça fonctionne impecc !! Coolos


Un tout grand merci tu m'as mis sur la voie.

John
 
WRInaute accro
de rien :) je m'étais aussi un peu arraché les cheveux quand j'ai eu ce type de problème :) faire des print_r($session) toutes les lignes pour voir à quel moment ça flanchait, je m'étais amusé :)
 
Discussions similaires
Haut