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 13/07/2008, 04h07   #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 [Cookies] id session variable

Bonjour,

J'ai un problème avec les identifiants de session.
Sur une page 1.php je fais un session_start() et je remplis la session avec le tableau $_SESSION et j'appelle un autre script 2.php dans lequel je remets un session_start() et je récupère les valeurs en sessions remplis auparavant et celles ci sont vides.
Après de multiples tests, nous avons trouvé que l'id de la session avait changé entre la page 1.php et la page 2.php donc il semblerait que sur la page 2.php il recréé un fichier de session sur le serveur à vide.
Le problème semble être encore plus complexe car quand le script est appelé de mon site tout semble fonctionner parfaitement et si un site extérieur l'appelle celà ne fonctionne plus sachant qu'il semble que sur firefox le problème n'est pas très présent mais présent tout le temps sur internet explorer.
J'avais pensé à passer la valeur de session trans_id à 1 mais je ne sais pas si il y a un rapport.
Merci d'avance de votre aide
pas30 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/07/2008, 11h43   #2
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,

On peut voir la partie de ta page2.php où tu récupères tes variables de session ?
N1bus est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/07/2008, 13h46   #3
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
Code :
1
2
3
4
5
<?php
session_start();
echo 'session id : '.session_id();
echo 'id site : '.$_SESSION[idsite];
?>
id site est vide alors qu'il est remplit auparavant et session_id retourne un identifiant de session différent de celui de la page d'avant
La page d'avant avait un code simple :
Code :
1
2
3
4
5
<?php
session_start();
echo 'session id : '.session_id();
$_SESSION[idsite]=5;
?>
pas30 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/07/2008, 14h09   #4
Invité régulier
 
Inscription : juillet 2008
Messages : 16
Détails du profil
Informations forums :
Inscription : juillet 2008
Messages : 16
Points : 8
Points : 8
Salut !

Je ne sais pas quel arichecture a ton site actuellement mais essayes un truc simple du style, mettre page1.php et page2 dans le meme repertoire (je sais ca n'a rien a voir mais bon c'est deja pour se rassurer).

Dans un second temps essayes $_SESSION['idsite'] plutot que $_SESSION[idsite] la encore c'est juste par précaution.

Si j'ai bien compris tu appelles un de tes script depuis un autre site. Si c'est le cas il est evident que l'id de session change par rapport a un script directement exécuter sur ton serveur.

Essaye de nous en dire plus sur le contexte de développement de ton application. Histoire qu'on puisse avoir un idée clair la dessus.

Ce qui est certain sur un meme site( d'apres le code que tu as donné), l'id du session ne peut pas changer. Sauf si la session est détruite en temps. A la limite regarde la durée de vie de tes sessions.

Pareil si tu as démarer une session sur un navigateur et que tu passe un autre navigateur la aussi la session sera différente.

Enfin bon donne nous plus de détails on pourra mieux cerné ton problème et si possible y trouver une solution satisfaisante !
djheart est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/07/2008, 00h51   #5
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
A ce jour, la proportion de sessions perdues est de près de 40 % sur mon site !!!
Le script est appelé à partir de sites extérieurs c'est un simple lien href vers mon script php celui-ci contient deux frames une haute et une affichant un site internet.
Dans ce script je fais un session_start(); au début et je remplis les valeurs de sessions dans le tableau par exemple $_SESSION['valeur']=25;
Je vous donne le code de ce fichier :
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
<?php
session_start();
	require("include/connection.php");
	require("include/maintenance.php");
	$url=parse_url($_SERVER['HTTP_REFERER']);
	$protocole=$url[scheme];
	$uri=$url[host];
	if (empty($uri)){
	$urlsite='';
	$urlsite2='';
	}
	else {
	$urlsite=$protocole.'://'.$uri;
	if (substr($uri,0,4)=='www.') {
	$urlsite2=$protocole.'://'.substr($uri,4);
	}
	else {
	$urlsite2=$protocole.'://'.'www.'.$uri;
	}
	}
	$pseudo=$_GET['pseudo'];
	$pub=$_GET['idpub'];
	if ($urlsite==$domaine || $urlsite2==$domaine) {
	$query2="select id,url from siteaffilie where (url='$urlsite' or url='$urlsite2')";
	}
	else {
	$query2="select id,pseudo,etat,url from siteaffilie where pseudo='".mysql_real_escape_string($pseudo)."' and etat='ACCEPTE' and (url='$urlsite' or url='$urlsite2')";
	}
	$result2 = mysql_query($query2, $connection) or die ("impossible d'effectuer l'insertion");
	$affected_rows2 = mysql_num_rows($result2);
	if ($affected_rows2!=1) {
	$code=0;
	include("tracker.php");
	echo '<p align=center>L\'adresse '.$urlsite.' n\'est pas autorisé à diffuser nos annonces publicitaires</p>';
	mysql_close();
	exit();
	}
	$data2=mysql_fetch_array($result2);
	$_SESSION['idsite']=$data2[id];
	$_SESSION['benef']=$pseudo;
	$_SESSION['idpub']=$pub;
	$query="select idpub,etat,lien,multiclic from publicite where idpub='$pub' and etat='ACTIF'";
	$result=mysql_query($query, $connection) or die('error making query2');
	$affected_rows=mysql_num_rows($result);
	if ($affected_rows==1) {
	$data=mysql_fetch_array($result);
	if (isset($_SESSION['timestamp'])) {
	if (($_SESSION['timestamp']+$_SESSION['secondes'])>time()) {
	$code=1;
	include("tracker.php");
	echo '
	<html>
<head>
<title></title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
 
<body bgcolor="#003366" text="#FFFFFF">
<div align="center">
  <p><font face="Georgia, Times New Roman, Times, serif" size="2"><b>Vous visitez 
    actuellement un autre partenaire</b></font></p>
  <p>&nbsp;</p>
</div>
</body>
</html>';
mysql_close();
exit();
	}
	}
	$_SESSION['lien']=$data[lien];
	$_SESSION['nbclic']=$data[multiclic];
	$_SESSION['parent']=1;
	}
	else {
	$code=2;
	include("tracker.php");
	echo '
	<html>
<head>
<title></title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
 
<body bgcolor="#003366" text="#FFFFFF">
<div align="center">
  <p><font face="Georgia, Times New Roman, Times, serif" size="2"><b>La publicité n\'existe pas !!!</b></font></p>
  <p>&nbsp;</p>
</div>
</body>
</html>';
mysql_close();
exit();
	}
echo '
<html>
<head>
<title></title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<frameset rows="85,*" frameborder="no" border="0" framespacing="0"> 
  <frame name="topFrame" scrolling="NO" noresize src="nbclic3.php?pseudo='.$pseudo.'">
  <frame name="mainFrame" src="'.$_SESSION['lien'].'">
</frameset>
<noframes> 
<body bgcolor="#003366" text="#FFFFFF">
</body>
</noframes> 
</html>';
mysql_close();
?>
Maintenant je vous donne le bout de code qui renvoie l'erreur et qui se trouve dans la frame haut soit nbclique3.php :
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
	session_start();
	require("include/connection.php");
	require("include/maintenance.php");
	$ip=$_SERVER['REMOTE_ADDR'];
	$idpub=$_SESSION['idpub'];
	$pseudo=$_GET['pseudo'];
	if (isset($_SESSION['idsite'])==false) {
	$code=3;
	include("tracker.php");
		echo '
<html>
<head>
<title></title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
 
<body bgcolor="#003366" text="#FFFFFF" link="#FFCC00" vlink="#FFCC33" alink="#FFCC33">
<table width="100%" border="0">
  <tr>
    <td width="100%" height="36"> 
      <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><b>Identifiant du site non trouvé !!!</b></font></p>
      <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><a href="#" onClick="parent.window.close()"><b>Fermer 
        la fenêtre</b></a></font></p>
</td>
</tr>
</table>
<p>&nbsp;</p>
</body>
</html>';
unset($_SESSION['parent']);
unset($_SESSION['lien']);
unset($_SESSION['idpub']);
unset($_SESSION['nbclic']);
exit();
	}
Le message d'erreur est "Identifiant du site non trouvé !!!" ce qui signifie que $_SESSION['idsite'] n'est pas rempli et pourtant il l'est dans la page d'avant.
Il s'avère qu'après avoir testé j'ai constaté que l'id de session change entre la page contenant les deux frames et nbclique3.php qui est la frame du haut.
J'ai basculé le site chez free et le problème est identique chez eux. Je l'ai à chaque fois sous INTERNET EXPLORER mais pas sous MOZILLA FIREFOX.
Est-ce que vous pensez que les frames pourraient avoir un lien avec ce problème ?
Merci d'avance
pas30 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/07/2008, 18h27   #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
J'avance sur le problème. En fait le problème est en grande partie lié à internet explorer qui ne génère pas le cookie sur le disque lorsqu'il trouve un site avec une frame pointant vers un autre site (le bug intervient si ce dernier veut générer un cookie sur le disque car IE Bloque ce cookie car il n'a pas de stratégie de confidentialité compacte)
J'ai inséré ce code avant le session_start()
Code :
header('P3P:CP=??IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT??');
et pour l'instant je n'ai plus que 5 % de pertes contrairement à mes 40 % de pertes au départ.
Mais comment réglé la totalité des problèmes
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 04h32.


 
 
 
 
Partenaires

Hébergement Web