IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

[Sécurité] probleme de session avec 2 serveurs web


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    164
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 164
    Points : 64
    Points
    64
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    164
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 164
    Points : 64
    Points
    64
    Par défaut
    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

    ++

  3. #3
    Membre éclairé Avatar de Hervé Saladin
    Homme Profil pro
    Ingénieur d'études en développement et déploiement d'applications
    Inscrit en
    Décembre 2004
    Messages
    647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur d'études en développement et déploiement d'applications
    Secteur : Service public

    Informations forums :
    Inscription : Décembre 2004
    Messages : 647
    Points : 799
    Points
    799
    Par défaut
    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

  4. #4
    Membre averti Avatar de johweb
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    342
    Détails du profil
    Informations personnelles :
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Décembre 2003
    Messages : 342
    Points : 367
    Points
    367
    Par défaut
    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.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    164
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 164
    Points : 64
    Points
    64
    Par défaut
    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

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    164
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 164
    Points : 64
    Points
    64
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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?

  7. #7
    Membre éclairé Avatar de Hervé Saladin
    Homme Profil pro
    Ingénieur d'études en développement et déploiement d'applications
    Inscrit en
    Décembre 2004
    Messages
    647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur d'études en développement et déploiement d'applications
    Secteur : Service public

    Informations forums :
    Inscription : Décembre 2004
    Messages : 647
    Points : 799
    Points
    799
    Par défaut
    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+

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    164
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 164
    Points : 64
    Points
    64
    Par défaut
    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


    ++

  9. #9
    Membre éclairé Avatar de Hervé Saladin
    Homme Profil pro
    Ingénieur d'études en développement et déploiement d'applications
    Inscrit en
    Décembre 2004
    Messages
    647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur d'études en développement et déploiement d'applications
    Secteur : Service public

    Informations forums :
    Inscription : Décembre 2004
    Messages : 647
    Points : 799
    Points
    799
    Par défaut
    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.
    sur B je le garde et des que j'envoie une requete a A je retransfere le session_id
    oui, exactement
    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.
    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
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    164
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 164
    Points : 64
    Points
    64
    Par défaut
    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
    ++

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    164
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 164
    Points : 64
    Points
    64
    Par défaut
    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.

  12. #12
    Membre éclairé Avatar de Hervé Saladin
    Homme Profil pro
    Ingénieur d'études en développement et déploiement d'applications
    Inscrit en
    Décembre 2004
    Messages
    647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur d'études en développement et déploiement d'applications
    Secteur : Service public

    Informations forums :
    Inscription : Décembre 2004
    Messages : 647
    Points : 799
    Points
    799
    Par défaut
    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

  13. #13
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    164
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 164
    Points : 64
    Points
    64
    Par défaut
    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

  14. #14
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    164
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 164
    Points : 64
    Points
    64
    Par défaut
    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

    ++

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Cookies] Probleme de session avec curl
    Par nono1307 dans le forum Langage
    Réponses: 1
    Dernier message: 16/11/2006, 07h34
  2. Probleme de session avec IE
    Par poullos dans le forum Langage
    Réponses: 4
    Dernier message: 29/08/2006, 23h06
  3. [strust] probleme de session avec IE
    Par pouss dans le forum Struts 1
    Réponses: 5
    Dernier message: 27/04/2006, 17h37
  4. [Sécurité] probleme de session avec aol
    Par jexl dans le forum Langage
    Réponses: 5
    Dernier message: 21/02/2006, 16h59
  5. Probleme de sessions avec un hébergeur
    Par totoranky dans le forum Langage
    Réponses: 3
    Dernier message: 20/10/2005, 02h36

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo