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 :

Un petit casse-tête de sessions


Sujet :

Langage PHP

  1. #1
    Membre actif Avatar de FrankOVD
    Homme Profil pro
    Directeur des systèmes d'information
    Inscrit en
    Juin 2005
    Messages
    438
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Directeur des systèmes d'information
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Juin 2005
    Messages : 438
    Points : 254
    Points
    254
    Par défaut Un petit casse-tête de sessions
    Bonjour,

    Pour harmoniser les sessions de plusieurs applications différentes, j'aurais besoin de passer le SID d'une session en tant que variable dans la session d'une autre application puis que cette autre application ausa besoin de ce SID pour manipuler l'autre session.

    Pour m'assurer de ne pas être embêté par toutes sortes de mesures pour empêcher les pop-up, je désire donc placer dans ma page un frame qui contiendrait un fichier recevant en $_GET mon SID.

    Est-il possible de gérer ainsi deux sessions bien distinctes séparées par un simple frame? Y a-t-il un moyen que je n'aurais pas envisagé qui m'éviterait tout ce casse-tête?

  2. #2
    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 : 43
    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
    Citation Envoyé par FrankOVD
    Y a-t-il un moyen que je n'aurais pas envisagé qui m'éviterait tout ce casse-tête?
    c'est possible en effet.
    As-tu essayé ceci : ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    session_name('unNom');
    session_start();
    en utilisant le même nom de session pour les deux applis ?
    Les deux applis doivent évidamment être hébergées sur le même serveur sans quoi il est impossible de partager une session par quelque moyen que ce soit.

    PS : dis-moi si ça marche s.t.p.

  3. #3
    Membre éprouvé Avatar de alain31tl
    Homme Profil pro
    Inscrit en
    Novembre 2005
    Messages
    935
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 935
    Points : 1 019
    Points
    1 019
    Par défaut
    Salut

    Il y a une chose relativement simple à faire, c'est de créer une table qui contiendrait tes différentes variables, associées à l'id de session, et au préalable enregistrées.

    Simple exemple de table (table_session):
    id_session
    nom
    prenom
    mail
    etc...

    Ensuite tu peux récupérer une session différente de celle en cours, voire même en récupérer plusieurs dans des templates distincts.

    Ceci en faisant une requête simple :

    $
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    results = mysql_query("SELECT * FROM table_session WHERE mail='$mail'");
    ou
    $results = mysql_query("SELECT * FROM table_session WHERE nom='$nom'");
    Mais peut importe la clause WHERE, l'intérêt est de récupérer le $session_id et par voie de conséquence les variables associées.

  4. #4
    Membre actif Avatar de FrankOVD
    Homme Profil pro
    Directeur des systèmes d'information
    Inscrit en
    Juin 2005
    Messages
    438
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Directeur des systèmes d'information
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Juin 2005
    Messages : 438
    Points : 254
    Points
    254
    Par défaut
    La situation exacte est que je dois regrouper deux applications Squirrelmail et un Forum PhpBB. Lorsqu'un utilisateur s'authentifie dans un des deux squirrelmail, il est dirigé vers un portail qui enrichi la session d'informations pertinentes en rapport avec l'utilisateur. Un lien dans ce plugin permet par exemple de sauter sur le Forum PhpBB (Un fichier .php entre les deux applications simule le login et "bypass" cette étape). Une fois l'information de login donnée au forum PhpBB, je change de serveur car le forum est effectivement sur un autre serveur.

    J'ai noté que la déconnection du forum se fait en passant deux valeurs en GET au fichier login.php (logout=true et le SID). Mon but est alors que ma session dans squirrelmail contienne le SID de la session du Forum pour qu'éventuellement le fichier signout de Squirrelmail puisse appeler la fermeture de la session du Forum.

    Précidément, j'avais pensé que je pourrais procéder de la façon suivante:

    • Lorsque le plugin Squirrelmail est ouvert, le fichier login.php dans le répertoire du plugin ajoute à la session de Squirrelmail les valeurs de session nécessaires au fonctionnement du plugin.

    • Lorsque l’usager clique sur le lien menant au forum, le fichier redirect.php toujours inclus dans le portail puise dans la base de données les informations d’authentification de l’usager et passe directement au fichier de validation des identités du forum en simulant que le formulaire a été rempli.

    • Lorsque le fichier d’authentification s’exécute, il crée une session propre au forum, récupère l’identifiant hexadécimal de cette session et le renvoie vers le portail pour qu’il soit inscrit en tant que valeur de session dans Squirrelmail.

    • Si l’utilisateur ferme sa session sur le portail, le fichier signout.php de Squirrelmail appelle le fichier d’authentification du forum en lui indiquant de fermer la session dont il a noté l’identifiant.

  5. #5
    Membre actif Avatar de FrankOVD
    Homme Profil pro
    Directeur des systèmes d'information
    Inscrit en
    Juin 2005
    Messages
    438
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Directeur des systèmes d'information
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Juin 2005
    Messages : 438
    Points : 254
    Points
    254
    Par défaut
    Alors si sur le serveur de mon Forum je charge une page quelconque qui contient la session du Forum et que dans cette page j'inclut dans mon Frame (http://autreserveur/mapage.php?sid=M0NS1D) est-ce que je pourrais ainsi réussir à ouvrir la session de mon Squirrelmail et y inscrire mon SID?

  6. #6
    Membre éprouvé Avatar de alain31tl
    Homme Profil pro
    Inscrit en
    Novembre 2005
    Messages
    935
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 935
    Points : 1 019
    Points
    1 019
    Par défaut
    Citation Envoyé par FrankOVD
    Alors si sur le serveur de mon Forum je charge une page quelconque qui contient la session du Forum et que dans cette page j'inclut dans mon Frame (http://autreserveur/mapage.php?sid=M0NS1D) est-ce que je pourrais ainsi réussir à ouvrir la session de mon Squirrelmail et y inscrire mon SID?
    Ok, je ferais plutôt de cette façon :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    http://autreserveur/mapage.php?".session_name()."=".session_id());
    Bref, et c'est là justement l'intérêt de stocker auparavant les différentes sessions dans une table (avec les variables utiles à l'utilisateur).
    Dans ta page appelée (mapage.php), il convient d'effectuer une requête pour collecter tous les éléments utiles puisque tu disposes désormais de l'id de session.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    .....SELECT * FROM table_session WHERE id_session='$session_id'");
    //...........
    Ensuite, celà nécessite évidemment à relancer un session_start () et les register des différentes variables dans les nouveaux fichiers de traitement.

    Ensuite, rien ne t'empêche de faire un delete de cette session au moment de la déconnexion de l'utilisateur, afin d'éviter de surcharger la table.
    Enfin bon, c'est une idée, je l'ai déjà réalisé notemment pour un outil partagé.

  7. #7
    Membre actif Avatar de FrankOVD
    Homme Profil pro
    Directeur des systèmes d'information
    Inscrit en
    Juin 2005
    Messages
    438
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Directeur des systèmes d'information
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Juin 2005
    Messages : 438
    Points : 254
    Points
    254
    Par défaut
    Hmm, je me demande pourquoi il faudrait faire tout ça? Tout ce dont j'ai besoin moi c'est le SID. Le reste m'importe peu j'ai tout ce dont j'ai besoin. Aussi je trouve bizare de stocker des données éphémères telles des variables de session dans une base de données.

  8. #8
    Membre éprouvé Avatar de alain31tl
    Homme Profil pro
    Inscrit en
    Novembre 2005
    Messages
    935
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 935
    Points : 1 019
    Points
    1 019
    Par défaut
    Tu peux le récupérer de cette façon :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     
    <?php
    session_start();
    $session_id = session_id();
    // verif
    echo $session_id ;
    ?>
    Pour répondre à ta dernière interrogation, ce ne sont pas des données éphéméres, mais grandement utiles.
    Il est courant d'entendre parler des agendas partagés (par exemple), et bien ils fonctionnent sur ce principe même.
    Je conçois cependant que ce n'est pas une méthode obligatoire mais elle peut rendre "service" selon l'application.

  9. #9
    Membre éprouvé Avatar de alain31tl
    Homme Profil pro
    Inscrit en
    Novembre 2005
    Messages
    935
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 935
    Points : 1 019
    Points
    1 019
    Par défaut
    En y réfléchissant, tu ne pourras passer que l'id de session dans ton url, et forcemment sans probléme. Mais celà ne servira à rien, tout du moins il ne sera pas exploitable et pour cause :

    Exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     
    <?php
    session_start();
    $name="Dupond";
    session_register("name");  
    $session_id = session_id();
     
    print("<a href='http://www.ton_autre_site.com/tapage.php?session_id=$session_id'>lien</a>");
    ?>
    Sur ton autre site, tapage.php n'affichera que l'id de session et non pas $name, qui pourtant est associé à cette session.

    Le choix du titre de ce post était pertinent.

  10. #10
    Membre actif Avatar de FrankOVD
    Homme Profil pro
    Directeur des systèmes d'information
    Inscrit en
    Juin 2005
    Messages
    438
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Directeur des systèmes d'information
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Juin 2005
    Messages : 438
    Points : 254
    Points
    254
    Par défaut
    Fichier de la session à récupérer :

    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
     
    <?
    session_name("phpbb");
    session_start();
    $_SESSION["test"] = "Forum";
    ?>
    <html>
      <body bgcolor="#BAD8AE">
    <?
    echo(session_id()."<br>");
    ?>
        <iframe src="http://autreserveur/mapage.php?sid=<?=session_id()?>" width="0" height="0" frameborder="0"></iframe><br>
    <?
    echo(session_id()."<br>");
    echo($_SESSION["test"]);
    ?>
      </body>
    </html>
    Fichier de la session maîtresse appelée dans le iFrame

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    <html><body bgcolor="#00FF0F">
    <?
    session_name("sqmail");
    session_start();
    echo(session_id()."<br>");
    echo($_GET["sid"]."<br>");
    $_SESSION["sq"] = $_GET["sid"];
    $_SESSION["test"] = "Squirrelmail";
    echo($_SESSION["sq"]."<br>");
    echo($_SESSION["test"]."<br>");
    ?>
    </body></html>
    Ça fonctionne bien, rien ne se mêle. Puisque ce test est concluent, je suppose que je pourrai utiliser le même principe!

  11. #11
    Membre éprouvé Avatar de alain31tl
    Homme Profil pro
    Inscrit en
    Novembre 2005
    Messages
    935
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 935
    Points : 1 019
    Points
    1 019
    Par défaut
    re,

    Je te le souhaite car j'ai fait également des tests de mon côté.
    Mais différemment car pas utilisé la méthode iframe mais passé l'id en get (ou post en hidden) d'un site sur un autre.
    Et en effet, je récupérais l'id mais pas les $variables associées.
    Mais franchement, c'est étrange !
    Qui dit autre serveur dit autre tableau de variable globale. C'est là où je pige pas par quel miracle ta procédure peut récupérer les différentes variables.
    hum....c'est creusant ce truc là !

  12. #12
    Membre actif Avatar de FrankOVD
    Homme Profil pro
    Directeur des systèmes d'information
    Inscrit en
    Juin 2005
    Messages
    438
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Directeur des systèmes d'information
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Juin 2005
    Messages : 438
    Points : 254
    Points
    254
    Par défaut
    Je suis allé m'amuser un peu dans le code du forum et je vois que c'est probablement carrément impossible de faire comme ça, et je me demande bien si ça pourrait même être possible à partir d'un même serveur. Existe-t-il un moyen d'aller piger dans les variables d'une autre application lorsque ces deux applications sont sur le même serveur?

  13. #13
    Membre éprouvé Avatar de alain31tl
    Homme Profil pro
    Inscrit en
    Novembre 2005
    Messages
    935
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 935
    Points : 1 019
    Points
    1 019
    Par défaut
    Salut

    Je me disais bien........

    Citation Envoyé par alain31tl
    Mais franchement, c'est étrange !
    Qui dit autre serveur dit autre tableau de variable globale. C'est là où je pige pas par quel miracle ta procédure peut récupérer les différentes variables.
    Citation Envoyé par FrankOVD
    Existe-t-il un moyen d'aller piger dans les variables d'une autre application lorsque ces deux applications sont sur le même serveur?
    Absolument, et c’était l’objet de ma toute première réponse.

  14. #14
    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 : 43
    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
    Pardon de revenir à la charge, mais as-tu essayé la solution que j'ai proposé plus haut ?
    Parce-que moi je viens de tester, et si les deux applis sont sur le même serveur, ça marche très bien ...
    Par contre, si les applis sont sur des serveur différents, ça ne peut pas marcher.

  15. #15
    Membre actif Avatar de FrankOVD
    Homme Profil pro
    Directeur des systèmes d'information
    Inscrit en
    Juin 2005
    Messages
    438
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Directeur des systèmes d'information
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Juin 2005
    Messages : 438
    Points : 254
    Points
    254
    Par défaut
    Ouais merci j'ai une assez bonne compréhension de comment passer et récupérer des valeurs, que ce soit sur le même serveur ou sur deux serveurs distants. Le problème maintenant c'est une limitation des possibilités dans ma 2e application. Je crois avoir trouvé une solution alors tout devrait être Okay même sur 2 serveurs distincts.

  16. #16
    Membre actif Avatar de FrankOVD
    Homme Profil pro
    Directeur des systèmes d'information
    Inscrit en
    Juin 2005
    Messages
    438
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Directeur des systèmes d'information
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Juin 2005
    Messages : 438
    Points : 254
    Points
    254
    Par défaut
    $_get !!

  17. #17
    Membre actif Avatar de FrankOVD
    Homme Profil pro
    Directeur des systèmes d'information
    Inscrit en
    Juin 2005
    Messages
    438
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Directeur des systèmes d'information
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Juin 2005
    Messages : 438
    Points : 254
    Points
    254
    Par défaut
    Je redonne des news dès que c'est terminé

  18. #18
    Membre éprouvé Avatar de alain31tl
    Homme Profil pro
    Inscrit en
    Novembre 2005
    Messages
    935
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 935
    Points : 1 019
    Points
    1 019
    Par défaut
    Citation Envoyé par FrankOVD
    Pour harmoniser les sessions de plusieurs applications différentes, j'aurais besoin de passer le SID d'une session en tant que variable dans la session d'une autre application puis que cette autre application ausa besoin de ce SID pour manipuler l'autre session.
    Ce n'était pas l'objet de ta première question.
    Passer des variables d'un site à l'autre, celà n'a jamais été le bout du monde, que ce soit en get ou post mais exploiter un ID de session sur un serveur tiers, c'est une autre paire de manches, voire impossible, et c'est ce qu'on s'évertuait à souligner ( en rapport avec ta question d'origine) .

  19. #19
    Membre éclairé
    Avatar de kankrelune
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    763
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 763
    Points : 858
    Points
    858
    Par défaut
    A partir du moment ou les appli sont sur le même serveur il n'y a rien d'autre à faire que la procédure habituelle normalement... .. .

    @ tchaOo°

  20. #20
    Membre éprouvé Avatar de alain31tl
    Homme Profil pro
    Inscrit en
    Novembre 2005
    Messages
    935
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 935
    Points : 1 019
    Points
    1 019
    Par défaut
    Citation Envoyé par kankrelune
    A partir du moment ou les appli sont sur le même serveur il n'y a rien d'autre à faire que la procédure habituelle normalement... .. .

    Ben si tu lis depuis le début, tu verras que ce n'est pas le cas.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. (Très)petit casse tête
    Par alcibiade dans le forum Lisp
    Réponses: 4
    Dernier message: 18/06/2011, 19h13
  2. [PHP 5.2] Petit casse-tête pour les amateurs de tableaux
    Par renaud26 dans le forum Langage
    Réponses: 8
    Dernier message: 07/02/2011, 15h25
  3. Petit casse tête - cp /php
    Par christophev85 dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 15/04/2009, 17h25
  4. Réponses: 1
    Dernier message: 10/03/2009, 17h05
  5. Réponses: 20
    Dernier message: 02/02/2008, 22h14

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