Précédent   Forum des professionnels en informatique > PHP > Langage > Sessions
Sessions Forum d'entraide sur les sessions avec PHP. Avant de poster -> FAQ sessions, Cours sessions et Sources sécurité
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 15/09/2007, 00h35   #1
Nouveau Membre du Club
 
Inscription : décembre 2006
Messages : 321
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 321
Points : 38
Points : 38
Par défaut Mélange de sessions - problème hébergeur

Bonjour,

J'ai déjà posté concernant un problème de mélange des sessions, ainsi quand un de mes membres se connectent ils tombent de temps en temps sur la page d'un autre membre et certains plus souvent que d'autres.
Voici mon code de connection :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
<?php
session_start();
require ("include/connection.php");
require ("include/maintenance.php");
require ("class.rc4crypt.php");
if(isset($_POST['selectionespace'])) $selection = $_POST['selectionespace'];
else { 
  print('<body bgcolor="#003366"><div align="center">
  <p><b><font face="Geneva, Arial, Helvetica, san-serif" size="2" color="#FFFFFF">Vous
  devez choisir un espace pour vous connecter (membre ou annonceur) !</font></b></p>
  <p align="center"><b><font face="Georgia, Times New Roman, Times, serif" size="3"><a href="javascript:history.go(-1)">retour</a></font></b></p>
  </div>
  ');
if (isset($_SESSION['parrain'])==false) {
$_SESSION=array(); // On efface toutes les variables de la session
session_destroy(); // Puis on détruit la session
}
else {
$parrain=$_SESSION['parrain'];
$_SESSION=array(); // On efface toutes les variables de la session
$_SESSION['parrain']=$parrain;
}
exit();
}
if ($_POST['invite']!=1) {
if(isset($_POST['login'])) $username = $_POST['login'];
else 
{
  print('<body bgcolor="#003366"><div align="center">
  <p><b><font face="Geneva, Arial, Helvetica, san-serif" size="2" color="#FFFFFF">Le 
  pseudo doit être indiqué !</font></b></p>
  <p align="center"><b><font face="Georgia, Times New Roman, Times, serif" size="3"><a href="javascript:history.go(-1)">retour</a></font></b></p>
  </div>
  ');
if (isset($_SESSION['parrain'])==false) {
$_SESSION=array(); // On efface toutes les variables de la session
session_destroy(); // Puis on détruit la session
}
else {
$parrain=$_SESSION['parrain'];
$_SESSION=array(); // On efface toutes les variables de la session
$_SESSION['parrain']=$parrain;
}
exit();
} 
 
if(isset($_POST['pass'])) $password = $_POST['pass']; 
else
{ 
  print('<body bgcolor="#003366"><div align="center">
  <p><b><font face="Geneva, Arial, Helvetica, san-serif" size="2" color="#FFFFFF">Le
  mot de passe doit être indiqué !</font></b></p>
  <p align="center"><b><font face="Georgia, Times New Roman, Times, serif" size="3"><a href="javascript:history.go(-1)">retour</a></font></b></p>
  </div>
  ');
if (isset($_SESSION['parrain'])==false) {
$_SESSION=array(); // On efface toutes les variables de la session
session_destroy(); // Puis on détruit la session
}
else {
$parrain=$_SESSION['parrain'];
$_SESSION=array(); // On efface toutes les variables de la session
$_SESSION['parrain']=$parrain;
}
exit();
}
 
if (get_magic_quotes_gpc()) 
{
  $password=stripslashes($password);
  $username=stripslashes($username);
  $cle="rtrtghjhjksfserzkjk";
  $cle = stripslashes($cle);
}
 
$rc4 = new rc4crypt(); 
$e = $rc4->encrypt($cle, $password);
$e = urlencode($e);
//Requêtes mySQL pour établir la validation.
$query = "SELECT * FROM abonne WHERE pseudo='".mysql_real_escape_string($username)."' AND pass='".mysql_real_escape_string($e)."'";
 
//Exécution de la requête mySQL et 
//affectation du nombre de rangés valides dans la table.
$result = mysql_query($query, $connection) or die('error making query');
$affected_rows = mysql_num_rows($result);
if($affected_rows==1) 
{
$data=mysql_fetch_array($result);
  if (empty($data['confirm'])) 
  {
    $ip=$_SERVER['REMOTE_ADDR'];
    $query2="update abonne set datelogin=CURDATE(),ip='$ip' where pseudo='".mysql_real_escape_string($username)."' AND pass='".mysql_real_escape_string($e)."'";
    $result2 = mysql_query($query2, $connection) or die('error making query');
    //ajoute l'utilisateur à une variable de session.
    $_SESSION['pseudo']=$username;
    if ($data['membre']==0 && $data['annonceur']==0) {
	header("Location: choixtypemembre.php");
	exit();
	}
    else 
    {
      if ($selection==1) 
      {
        if ($data['membre']==1) {
		header("Location: espacemembre.php");
		exit();
		}
        else 
        {
          print('<body bgcolor="#003366"><div align="center">
          <p><b><font face="Geneva, Arial, Helvetica, san-serif" size="2" color="#FFFFFF">Vous n\'avez pas de compte
          membre, pour en ouvrir un vous devez aller dans votre compte et faire basculer votre type de compte !</font></b></p>
          <p align="center"><b><font face="Georgia, Times New Roman, Times, serif" size="3"><a href="javascript:history.go(-1)">retour</a></font></b></p>
          </div>
          ');
if (isset($_SESSION['parrain'])==false) {
$_SESSION=array(); // On efface toutes les variables de la session
session_destroy(); // Puis on détruit la session
}
else {
$parrain=$_SESSION['parrain'];
$_SESSION=array(); // On efface toutes les variables de la session
$_SESSION['parrain']=$parrain;
}
exit();
        }
      }
      else 
      {
        if ($data['annonceur']==1) {
		header("Location: espaceannonceur.php");
        exit();
		}
		else 
        {
          print('<body bgcolor="#003366"><div align="center">
          <p><b><font face="Geneva, Arial, Helvetica, san-serif" size="2" color="#FFFFFF">Vous n\'avez pas de compte
          annonceur, pour en ouvrir un vous devez aller dans votre compte et faire basculer votre type de compte !</font></b></p>
          <p align="center"><b><font face="Georgia, Times New Roman, Times, serif" size="3"><a href="javascript:history.go(-1)">retour</a></font></b></p>
          </div>
          ');
if (isset($_SESSION['parrain'])==false) {
$_SESSION=array(); // On efface toutes les variables de la session
session_destroy(); // Puis on détruit la session
}
else {
$parrain=$_SESSION['parrain'];
$_SESSION=array(); // On efface toutes les variables de la session
$_SESSION['parrain']=$parrain;
}
exit();
        }
      }
    }
  }
  else {
if (isset($_SESSION['parrain'])==false) {
$_SESSION=array(); // On efface toutes les variables de la session
session_destroy(); // Puis on détruit la session
}
else {
$parrain=$_SESSION['parrain'];
$_SESSION=array(); // On efface toutes les variables de la session
$_SESSION['parrain']=$parrain;
}
  header("Location: compteinactif.php");
  exit();
  }
}
else {
if (isset($_SESSION['parrain'])==false) {
$_SESSION=array(); // On efface toutes les variables de la session
session_destroy(); // Puis on détruit la session
}
else {
$parrain=$_SESSION['parrain'];
$_SESSION=array(); // On efface toutes les variables de la session
$_SESSION['parrain']=$parrain;
}
header("Location: erreur.php");
exit();
}
}
else {
    $_SESSION['invite']=1;
	      if ($selection==1) 
      {
        header("Location: espacemembre.php");
		exit();
      }
      else 
      {
        header("Location: espaceannonceur.php");
		exit();
	}
}
mysql_close();
?>
Voilà
Mon code n'est pas forcément faux
J'ai fait des tests sur free et pour l'instant les bugs ne semblent pas se retrouver sur free mais je dois faire un test grandeur nature en basculant tout le site sur free par exemple mais free ne gère pas les DNS donc impossible de rediriger mon nom de domaine vers free.
Auriez-vous une idée sachant qu'il me faut un bon hébergeur pour etre crédible auprès de 1and1 mon hébergeur actuel qui ne veut rien entendre. Pour eux çà vient de mon code mais pourtant les essais sur free sont bons pour l'instant mais assez peu de personnes vont sur ce site qui est juste un site de test, les données ne sont pas reportées sur le site officiel hébergé sur 1and1 du coup mes membres ne vont pas trop sur ce site de test.
Merci de m'aider, ce problème plombe mon site depuis un moment déjà.
Et je me vois mal reprendre un nouvel hébergeur payant, tout çà est bien compliqué.
Sinon pour mon code j'aimerais faire le session_start() juste si le pseudo et le mot du passe du membre sont correctes est-ce que je peux car ici on m'avait dit qu'il fallait toujours mettre session_start() au début du code ce que j'ai fait mais ici ce n'est pas très logique d'ouvrir la session dès le début, on a besoin de la session uniquement si le pseudo et le mot de passe sont correctes.
Sinon pensez-vous qu'il soit nécessaire de crypter le pseudo dans la session ?
pas30 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/09/2007, 00h42   #2
Membre émérite
 
Inscription : juin 2002
Messages : 1 013
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 1 013
Points : 959
Points : 959
Citation:
Envoyé par pas30 Voir le message
Sinon pour mon code j'aimerais faire le session_start() juste si le pseudo et le mot du passe du membre sont correctes est-ce que je peux car ici on m'avait dit qu'il fallait toujours mettre session_start() au début du code ce que j'ai fait mais ici ce n'est pas très logique d'ouvrir la session dès le début, on a besoin de la session uniquement si le pseudo et le mot de passe sont correctes.
Cela paraît logique, mais il semble quand-même préférable de le mettre en première instruction. Dans le cas contraire, cela génère régulièrement des erreurs
francis m est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/09/2007, 01h11   #3
Rédacteur/Modérateur
 
Avatar de N1bus
 
Inscription : janvier 2003
Messages : 2 018
Détails du profil
Informations personnelles :
Âge : 47
Localisation : France, Charente Maritime (Poitou Charente)

Informations forums :
Inscription : janvier 2003
Messages : 2 018
Points : 1 992
Points : 1 992
Bonjour,

J'ai eu également le problème que j'ai résolu ainsi :

Code :
1
2
3
 
session_start();
session_regenerate_id();
DOC PHP : session_regenerate_id()
N1bus est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/09/2007, 02h18   #4
Nouveau Membre du Club
 
Inscription : décembre 2006
Messages : 321
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 321
Points : 38
Points : 38
De quel problème parlez-vous ???
Le mélange des sessions ???
Ou le session_start() en milieu de page et non au début

Merci
pas30 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/09/2007, 02h22   #5
Rédacteur/Modérateur
 
Avatar de N1bus
 
Inscription : janvier 2003
Messages : 2 018
Détails du profil
Informations personnelles :
Âge : 47
Localisation : France, Charente Maritime (Poitou Charente)

Informations forums :
Inscription : janvier 2003
Messages : 2 018
Points : 1 992
Points : 1 992
Citation:
Envoyé par pas30 Voir le message
De quel problème parlez-vous ???
Le mélange des sessions ???
Ou le session_start() en milieu de page et non au début

Merci
Le mélange des sessions.
N1bus est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/09/2007, 02h35   #6
Nouveau Membre du Club
 
Inscription : décembre 2006
Messages : 321
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 321
Points : 38
Points : 38
Salut,

C'était quoi ton problème, tes membres se connectaient à ton site et tombaient sur le compte d'autres personnes ???
Est-ce que çà viendrait d'un piratage du site ???
Et tu étais chez 1and1 ?
C'est bizarre on ne donne jamais ce bout de code à insérer et en plus je viens de voir que ce code n'est bon qu'a partir de la version 5 de php car l'ancienne version de php ne supprimait pas les anciennes sessions.
Bizarre tout çà !!!
pas30 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/09/2007, 10h11   #7
Rédacteur/Modérateur
 
Avatar de N1bus
 
Inscription : janvier 2003
Messages : 2 018
Détails du profil
Informations personnelles :
Âge : 47
Localisation : France, Charente Maritime (Poitou Charente)

Informations forums :
Inscription : janvier 2003
Messages : 2 018
Points : 1 992
Points : 1 992
Citation:
C'était quoi ton problème, tes membres se connectaient à ton site et tombaient sur le compte d'autres personnes ???
Non,
Sur mon site (une application de gestion de fédération en ligne), un administrateur qui avait les droits pour administrer deux fédérations se connectait sur une fédé puis ouvrait un autre navigateur ou un autre onglet sur le même PC pour se connecter à l'autre fédération.

Il est arrivé (pas toujours) que les valeurs des deux sessions soient mélangées. Le programme utilisait alors les valeurs de la session de la première fédération et s'en servait pour la deuxième fédération.

Note :
L'administrateur utilise IE7. Moi j'utilise IE6 et je n'avais jamais eu le problème même en me connectant à plusieurs fédérations sur le même PC.
Je n'ai pas trop cherché d'où ça venait, j'ai été au plus pressé : les administrateurs des ligues et des clubs commandent des licences ou des passeports sportifs et dès qu'il s'agit d'argent il vaut mieux être rapide et surtout efficace.


En vérifiant, on s'est aperçu que les deux sessions avaient le même id . (CQFD) d'où le mélange.

Citation:
Est-ce que çà viendrait d'un piratage du site ???
Pas de piratage sur ce site qui n'est pas publique

Citation:
Et tu étais chez 1and1 ?
Non , serveur Dédié

Citation:
je viens de voir que ce code n'est bon qu'a partir de la version 5 de php car l'ancienne version de php ne supprimait pas les anciennes sessions.
Bizarre tout çà !!!
Oui , j'utilise PHP5.

DOC PHP :
(PHP 4 >= 4.3.2, PHP 5)
session_regenerate_id -- Remplace l'identifiant de session courant par un nouveau

c'est seulement le paramètre delete_old_session (true/false) qui a été ajouté pour PHP5

Pour ce cas, je ne veux pas que l'ancienne session soit supprimée au cas où l'administrateur se serait connecté aux deux fédérations qu'il veut administrer sur le même PC.


Citation:
C'est bizarre on ne donne jamais ce bout de code à insérer
Ben voilà, c'est fait. Et il n'y a rien de bizarre, c'est dans la DOC PHP.
Je ne crois pas que les developpeurs de PHP se soient amusés à créer une fonction juste pour le fun. Il doit y avoir d'autres cas où les developpeurs Web peuvent avoir besoin de regénérer l'id de session.
N1bus est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/09/2007, 15h34   #8
Nouveau Membre du Club
 
Inscription : décembre 2006
Messages : 321
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 321
Points : 38
Points : 38
Oui mais toi c'est sur le même ordinateur que les deux sessions sont ouvertes.
Moi non, c'est des personnes qui se connectent sur deux ordinateurs séparés, tu as un membre que nous appelerons bill et un autre "toto", bill se connecte sur le site et tape pseudo et mot de passe et au bout de quelques manipulations sur le site tombe sur le compte de toto, toutes les informations affichées sont désormais celle de "toto".
C'est étrange il doit y avoir des tas d'applications php qui existent à ce jour et qui n'intègre pas ce bout de code et qui fonctionne à la perfection.
pas30 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/09/2007, 15h58   #9
Rédacteur/Modérateur
 
Avatar de N1bus
 
Inscription : janvier 2003
Messages : 2 018
Détails du profil
Informations personnelles :
Âge : 47
Localisation : France, Charente Maritime (Poitou Charente)

Informations forums :
Inscription : janvier 2003
Messages : 2 018
Points : 1 992
Points : 1 992
Peu importe,
Si tu crée ou regenere l'identifiant de session à chaque connexion, tu n'auras pas de risque de te retrouver avec la même session utilisée par 2 personnes différentes.

Citation:
C'est étrange il doit y avoir des tas d'applications php qui existent à ce jour et qui n'intègre pas ce bout de code et qui fonctionne à la perfection.
Où est le problème ?
Je te proposes une solution. Teste-la puis dis nous ce qu'il en est.
N1bus est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/09/2007, 23h43   #10
Nouveau Membre du Club
 
Inscription : décembre 2006
Messages : 321
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 321
Points : 38
Points : 38
En fait, je viens de passer tout le site en php5 et depuis plus d'anomalies reportées par mes membres.
J'attend de voir et je vous tiens au courant
pas30 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 21h02.


 
 
 
 
Partenaires

Hébergement Web