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 31/03/2006, 10h44   #1
Nouveau Membre du Club
 
Inscription : juin 2004
Messages : 166
Détails du profil
Informations forums :
Inscription : juin 2004
Messages : 166
Points : 33
Points : 33
Par défaut [Sécurité] probleme de session avec 2 serveurs web

salut voila je realise une sorte de traceur statistique en php

Sur le serveur je realise les traitement dont j'ai besoin et sur le client je n'envoye que les variables dont j'ai besoin.


pour une visite je stocke dans un session sur le serveur l'ip la date du jour et l'heure d'ouverture de la premiere page. pour eviter de comptabilité X visites pour X ouverture de pages.

Le probleme c'est que mes tests de créations de session fonctonne correctement si jexecute mon script sur le serveur.

par contre si jappel le script par le client sa ne fonctionne pas du tout


donc j'appel a vous pour mexpliquer car je ne comprend pas du tout la lol

voici le code coté client:

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
 
$user_agent_client=urlencode($_SERVER['HTTP_USER_AGENT']);
$langage_client=urlencode($_SERVER['HTTP_ACCEPT_LANGUAGE']);
$adresse_ip_client=urlencode($_SERVER['REMOTE_ADDR']);
$referer_client=urlencode($_SERVER['HTTP_REFERER']);
$hote_client=urlencode($_SERVER['HTTP_HOST']);
$page_demandee_client=urlencode($_SERVER['REQUEST_URI']);
 
//adresse de la page à appeler
$URL="http://monsite.com/page_test.php";
//parametres des variables a envoyer
$variables="user_agent_client=".$user_agent_client."&langage_client=".$langage_client."&adresse_ip_client=".$adresse_ip_client
            ."&referer_client=".$referer_client."&hote_client=".$hote_client."&page_demandee_client=".$page_demandee_client;
//initialise d'une instance curl
$ch = curl_init();
//definition de l'url
curl_setopt($ch, CURLOPT_URL,$URL);
//ouverture par la methode POST pour l'envoie des variables
curl_setopt($ch, CURLOPT_POST, 1);
//envoie de la requete avec les variables
curl_setopt($ch, CURLOPT_POSTFIELDS, $variables);
//execution de la commande curl et fermeture
curl_exec ($ch);
curl_close ($ch);
Et voici le code coté serveur
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
 
function infos_visiteur($user_agent_client, $langage_client, $adresse_ip_client, $referer_client, $hote_client, $page_demandee_client)
{
 //fonction qui permet de connaitre les infos du visiteurs comme :
 // son user agent sa langue,d'ou il vient ....
 //on recuperer les variables pour les traitements
 $useragent= $user_agent_client;
 $langue= $langage_client;
 $ip_client= $adresse_ip_client;
 $url_referer=$referer_client;
 $ndd_serveur=$hote_client;
 $page_demandee=$page_demandee_client;
 
 
 
 //enregistrement dans des sessions si elle n'existent pas pour les garder sur tout le script
 if(!isset($_SESSION['ip']) and !isset($_SESSION['date_du_jour']) and !isset($_SESSION['heure_du_jour']))
 {
   $date_jour=date("Y-m-d");
   $heure_jour=date("G:i:s");
 
   $_SESSION['ip']=$ip_client;
   $_SESSION['date_du_jour']=$date_jour;
   $_SESSION['heure_du_jour']=$heure_jour;
   echo "passage session";
 }
 else
 {
  echo "faux<br>";
 }
quand je regarde le fichier de session sur le serveur il est parfaitement créé mais il se créé a chaque fois quand il est appeller par le client

comment faire ?


merci par avance
xtaze est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/03/2006, 11h53   #2
Nouveau Membre du Club
 
Inscription : juin 2004
Messages : 166
Détails du profil
Informations forums :
Inscription : juin 2004
Messages : 166
Points : 33
Points : 33
en fait je pense avoir trouver une partie de mon erreur mais je ne sai spas la resoudre

à chaque fois que le client appel le script du serveur il ouvre une communication (donc une session) le serveur la traite renvoie la reponse et le client ferme la communication (donc la session)

et la fois dapres il ouvre une nouvelle communication d'onc une nouvelle session et c'est pour sa que j'ai un souci.

n'auriez vous pas une petite idée ne serait ce que pour garder les info du client car une visite doit etre unique mais une visite peut avoir plusieur pages vu

++
xtaze est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/03/2006, 12h04   #3
Membre chevronné
 
Avatar de Hervé Saladin
 
Développeur Web
Inscription : décembre 2004
Messages : 636
Détails du profil
Informations personnelles :
Âge : 30

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : décembre 2004
Messages : 636
Points : 689
Points : 689
Salut,
alors déja ta question n'est pas claire du tout, on ne comprends pas bien quel est ton problème, ce que tu essayes de faire etc ... même si dans ta tête c'est claire, pour ceux qui te lisent c'est assez obscur.
Je pense que c'est d'ailleurs pour cela que personne ne t'a répondu.
Pourrais tu donner plus de détails en expliquant simplement et clairement.

Ensuite, il y a quelque chose que je n'ai pas bien compris :
tu parles de code éxecuté sur le client, de quel client tu parle ?
Tu parles de l'utilisateur ou du serveur qui se trouve être client dans l'echange http entre tes deux serveurs via curl ?

Enfin, dans le dernier script, je ne sais pas si tu l'as mis en entier, mais il ya deux choses qui me sautent aux yeux :
il manque un '}' quelque part
il manque un appel à session_start() avant de commencer à travailler sur les sessions
__________________
Ne cliquez pas sur ce lien
Hervé Saladin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/03/2006, 12h09   #4
Membre éclairé
 
Avatar de johweb
 
Inscription : décembre 2003
Messages : 332
Détails du profil
Informations personnelles :
Localisation : France, Sarthe (Pays de la Loire)

Informations forums :
Inscription : décembre 2003
Messages : 332
Points : 316
Points : 316
xtaze, pour vérifier si ton client s'est déjà connecté, tu pourrais passer par les cookies, à condition qu'ils soient autorisés sur le poste du client.
johweb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/03/2006, 12h20   #5
Nouveau Membre du Club
 
Inscription : juin 2004
Messages : 166
Détails du profil
Informations forums :
Inscription : juin 2004
Messages : 166
Points : 33
Points : 33
ouai desolé si je n'ai pas été claire je vais tenté de l'etre plus :

je suis en train de developper une application pour repertorier les visites de visiteurs et de robots de moteur de recherche de sites web.

Dans un premier temps j'ai réalisé les tests sur un site Web. l'application d'audience tournait aussi sur ce meme serveur.
Dans cette condition, l'application fonctionnait correctmeent ormis quelques bug mineurs.


J'ai voulu faire des tests sur le serveur definitif que nous appellerons A. Le ou les serveurs de sites web seront appellés B et C.

Donc sur A j'ai mon application avec ma base de données, et sur B et C j'ai placé un genre de tag ( celui avec les commandes curl pour envoyer les infos au serveur A)

Le probleme c'est que lorsque B appel une page, il execute le Tag et donc envoie des infos a A.
A recoit les infos, ouvre une session, fait le traitement et renvoie le resultat a B.
Ensuite B referme la communication donc la session est fermé.

Apres lorsque B appel une nouvelle page, rebelotte sauf qu'une nouvelle session est ouvert sur A donc je perds mes données.

Comment pourrai je faire pour garder mes données ou laisser la session ouvertes ou passer par un autre langage (pas de javascript...car pas gerer par les robots de moteurs de recherche)
pour les cookies idem, je ne sais pas si tout les robot accepts les cookies

Voila en esperant avoir etais plus claire


merci encore
xtaze est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/03/2006, 12h23   #6
Nouveau Membre du Club
 
Inscription : juin 2004
Messages : 166
Détails du profil
Informations forums :
Inscription : juin 2004
Messages : 166
Points : 33
Points : 33
Citation:
Envoyé par Hervé Saladin
Salut,

Enfin, dans le dernier script, je ne sais pas si tu l'as mis en entier, mais il ya deux choses qui me sautent aux yeux :
il manque un '}' quelque part
il manque un appel à session_start() avant de commencer à travailler sur les sessions
Non je n'ai pas mis le script entier et oui j'ai bien integrer un session_start() et le } manquant c'est car ma fonction n'est pas fini
mais je vais mettre le tout alors :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
<?
  session_start();
  include('include/connexion.inc.php');
  include('include/fonctions.inc.php');
 
  //on recupere toutes les variables envoyé par la methode post
  $tableau=array("user_agent_client", "langage_client", "adresse_ip_client", "referer_client", "hote_client", "page_demandee_client");
  foreach($tableau as $valeur)
  {
  $$valeur=(array_key_exists($valeur,$_POST) ? $_POST[$valeur] : 'Null');
  }
 
 infos_visiteur($user_agent_client, $langage_client, $adresse_ip_client, $referer_client, $hote_client, $page_demandee_client);
voila comment jappel ma fonction


moi dans tout sa je souhaite garger l'ip du client, la date et l'heure d'ouverture du premier fichier car une visite est unique, mais une visite peut visiter plusieurs pages donc en identifiant si l'ip connecté le 30-03-06 a 14h:12:23 existe ou pas on sais si la visite est nouvelle ou non

c'est plus claire comme ca?
xtaze est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/03/2006, 13h58   #7
Membre chevronné
 
Avatar de Hervé Saladin
 
Développeur Web
Inscription : décembre 2004
Messages : 636
Détails du profil
Informations personnelles :
Âge : 30

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : décembre 2004
Messages : 636
Points : 689
Points : 689
ok, merci pour ces eclaircissements, je comprends mieux maintenant
Alors pour ton problème de session, sache que le mécanisme des sessions passe par la transmission d'un cookie (nommé sessionid qui permet d'identifier le client).
Donc, si c'est ton serveur A qui gère les sessions, sache qu'il considerera que c'est B et C les clients (pas les visiteurs). Les sessions qu'il gèrera seront les sessions de B et C, pas celles des visiteurs.
Si tu veux que les sessions soient propres à chaque visiteur, il faudra que tu les gere sur B et C.
Sinon, si c'est bien sur A que tu veux gèrer les sessions (dans ce cas tu ne devras avoir que deux sessions différentes), tu va devoir gèrer la transmission des cookies de sessionid :
- lors de la premiere requette http entre A et B (pareil entre A et C) via curl, A va transmettre un cookie sessionId à B. Il faudra donc que sur B tu récupère ce cookie et que tu l'enregistre quelque part (en mémoire par exemple). Ensuite, pour chaque nouvelle requete http que tu enverra de B vers A, tu devra veiller à bien réenvoyer ce cookie dans la requete http pour que A "reconaisse" B et retrouve sa session.
Je ne sais pas si curl permet de gèrer les cookies (je te laisse te dé****er) mais je pense que oui. De toutes façons tu devra réussir à le faire d'une façon ou d'une autre si tu veux que tes sessions fonctionnent bien.

Bon courage, a+
__________________
Ne cliquez pas sur ce lien
Hervé Saladin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/03/2006, 14h06   #8
Nouveau Membre du Club
 
Inscription : juin 2004
Messages : 166
Détails du profil
Informations forums :
Inscription : juin 2004
Messages : 166
Points : 33
Points : 33
oui je vois je transfere le session_id de A vers B sur B je le garde et des que j'envoie une requete a A je retransfere le session_id :
probleme comment garder la variable "session" sur B au chargement d'une nouvelle page a par par les sessions?

sa va etre dur mais je vais esseyer

car le probleme c'est que sur A je connais la config de mon serveur mais sur B non car B et C seront des serveurs web qui ne m'appartiendront pas et dont je n'aurai pas (la main dessus en gros). donc c'est pour sela que je veux reduire au maximum les traitements sur B

par contre Curl je le decouvre aussi (je suis en stage lol) et jai vu que tu peut renvoyer des valeurs en curl donc sa doit etre possible.

au depart javais fait cela avec le fsockopen() et comme j'ai lu qu'avec curl c'était mieux adapté alors voila
mais jattend tjs une autre idée si quelqu'un en a une qu'il n'hésite pas je suis prenneur


++
xtaze est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/03/2006, 14h33   #9
Membre chevronné
 
Avatar de Hervé Saladin
 
Développeur Web
Inscription : décembre 2004
Messages : 636
Détails du profil
Informations personnelles :
Âge : 30

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : décembre 2004
Messages : 636
Points : 689
Points : 689
Citation:
oui je vois je transfere le session_id de A vers B
oui mais tu n'as pas besoin de gèrer cela, le cookie est automatiquement envoyé à B par le simple fait d'appeler la methode session_start() sur A.
Citation:
sur B je le garde et des que j'envoie une requete a A je retransfere le session_id
oui, exactement
Citation:
probleme comment garder la variable "session" sur B au chargement d'une nouvelle page a par par les sessions?
Le plus simple serait probablement de l'enregistrer en variable blobale ou dans un fichier temporaire sur le disque, mais on peut immaginer d'autres solutions.
Citation:
le probleme c'est que sur A je connais la config de mon serveur mais sur B non car B et C seront des serveurs web qui ne m'appartiendront pas et dont je n'aurai pas (la main dessus en gros). donc c'est pour sela que je veux reduire au maximum les traitements sur B
dans ce cas, il vaut peut etre mieux opter pour la solution des variables globales car tu n'es pas sur d'avoir les droits suffisants pour la solution du fichier
Citation:
au depart javais fait cela avec le fsockopen() et comme j'ai lu qu'avec curl c'était mieux adapté alors voila
oui, tu m'étonnes !!!
si tu passe par des sockets tcp de base, tu va devoir ré-implémenter tout le protocole http toi même .... bonjour la galère !
La question de l'utilité de curl ne se pose même pas dans ton cas, c'est définitivement ce qu'il y a de plus adapté

Bon, sinon à part ça, j'ai fait une petite recherche et j'ai trouvé que l'on peut effectivement gerer les cookies avec curl :
la methode curl_setopt() permet cela (entre autres)
il faut l'utiliser ainsi :
Code :
curl_setopt($c, CURLOPT_COOKIE, 'nomcookie=valeurcookie');
(à appeler avant d'envoyer la requete bien sur)

Apparament, si tu as PHP version 5.1 ou superieure, il y a même une option CURLOPT_COOKIESESSION. Ils expliquent rapidement son principe sur cette page

bon, je pense que tu as assez de billes en main à présent, je te laisse completer ces recherches et améliorer ton code en fonction ...

encore une fois, bon courage
__________________
Ne cliquez pas sur ce lien
Hervé Saladin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/03/2006, 14h36   #10
Nouveau Membre du Club
 
Inscription : juin 2004
Messages : 166
Détails du profil
Informations forums :
Inscription : juin 2004
Messages : 166
Points : 33
Points : 33
Merci car c'est pas gagné car comme je dois gérer a la fois les visiteur et les robots.... tout marche sur le meme serveur mais la a distance c trop la galere lol

merci encore je vais tester
++
xtaze est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/03/2006, 14h56   #11
Nouveau Membre du Club
 
Inscription : juin 2004
Messages : 166
Détails du profil
Informations forums :
Inscription : juin 2004
Messages : 166
Points : 33
Points : 33
sinon j'ai pensé a une idée, peut on stocker des données sur la memoire du serveur lui meme un peu comme les pointeurs en C et C++.

je transferer les session_id() par leur adresse genre $pt=&$session_id_client:
je ne sai smem pas si cela existe cela mais pensez vous que sa serai jouable comme ca?

car sur le post B je ne peux ni utiliser les cookies (a cause des robots) ni les sessions (aucune garantie que sa soit activé sur le client.
xtaze est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/03/2006, 15h04   #12
Membre chevronné
 
Avatar de Hervé Saladin
 
Développeur Web
Inscription : décembre 2004
Messages : 636
Détails du profil
Informations personnelles :
Âge : 30

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : décembre 2004
Messages : 636
Points : 689
Points : 689
on peut gèrer des pointeurs en php, mais je ne te le conseille pas.
en variable globale, ca ne te va pas ? je pense que c'est la meilleure solution pourtant ...
Bon, si tu veux quand même faire du bidouillage de pointeurs (c'est toujours dangereux), il me semble qu'il faut doubler le $ devant le nom de variable pour acceder à l'adresse, mais je suis pas sur, c'est quelque chose que je ne maîtrise pas. Par contre tu pourras trouver de la doc dessus.
Encore une fois je te recommande plutôt d'utiliser les variables globales si la config php de tes serveurs B et C te le permettent.
Tiens, va voir cette page ca te sera sans doute utile
__________________
Ne cliquez pas sur ce lien
Hervé Saladin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/03/2006, 15h35   #13
Nouveau Membre du Club
 
Inscription : juin 2004
Messages : 166
Détails du profil
Informations forums :
Inscription : juin 2004
Messages : 166
Points : 33
Points : 33
oui mais le probleme du global c'est que si je fait un refresh ou que je demande une autre page ma variable n'existera plus.

la variable global a bien une porté sur toute la page mais on ne peut garder de valeur que par les sessoins ou par les cookies non?

enfin moi global je l'utilise que lorsque que je veux me ma variable soit accessible par plusieurs fonctions....

dis moi si je me trompe

j'ai trouvé un truc avec $_serveur c cela : $_SERVER["UNIQUE_ID"] mais je n'arrive pas a le faire marcher, car dans google jai tappé cela et je suis tombé sur plein de phphinfo et a chaque fois ce numero etait unique et changé que si jouvré une nouvelle fenetre

ne serait ce pas la la solution? mas moi jarrive meme pas a lafficher dans mon script lol
xtaze est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/03/2006, 16h22   #14
Nouveau Membre du Club
 
Inscription : juin 2004
Messages : 166
Détails du profil
Informations forums :
Inscription : juin 2004
Messages : 166
Points : 33
Points : 33
bon je considere qu'a partir du moment ou le client gere le php il a acces aux sessions donc le probleme est resolu je pense

++
xtaze 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 23h07.


 
 
 
 
Partenaires

Hébergement Web