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

ASP.NET Discussion :

[Sessions] Partage de sessions entre PHP et ASP.NET


Sujet :

ASP.NET

  1. #1
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut [Sessions] Partage de sessions entre PHP et ASP.NET
    Bonjour,

    J'ai actuellement une problématique sur laquelle j'aimerais avoir vos avis...

    Mon entreprise a un site web de type "back office", écrit en PHP et servi par Apache sous Linux. Pour diverses raisons, nous souhaitons migrer progressivement ce site vers ASP.NET. Ce qui signifie que pendant la période transitoire, des pages PHP et ASP.NET vont coexister, sur 2 serveurs différents (Apache et IIS).

    Ce qui me pose problème, c'est le partage des données de sessions entre les 2 serveurs : je ne veux pas, par exemple, qu'un utilisateur ait besoin de s'identifier une fois pour PHP et une fois pour ASP.NET... ça doit rester complètement transparent pour l'utilisateur. Je pensais donc créer mes propres handlers de session en PHP et en ASP.NET, en enregistrant les données de sessions dans une BDD accessible par les deux serveurs. Les 2 langages offrent cette possibilité, comme expliqué dans ces liens :
    http://www.php.net/manual/fr/functio...ve-handler.php
    http://msdn.microsoft.com/en-us/library/ms178587.aspx

    Côté PHP, j'ai réussi à stocker les données de sessions en base, ça fonctionne nickel. Je me contente de mettre dans une table ce qui est habituellement écrit dans un fichier de session. Là où ça se complique, c'est côté ASP.NET... je ne sais pas trop, dans mon implémentation de SessionStateStoreProviderBase, comment gérer la sérialisation/désérialisation des données de session au format PHP. Surtout que les données de session qu'on utilise actuellement en PHP peuvent avoir une structure assez complexe (tableaux associatifs imbriqués par exemple)...

    Avez-vous déjà rencontré ce type de problématique ? Si oui, comment avez-vous géré ça ?

    Toute idée constructive est la bienvenue, y compris si elle suggère une approche différente...

    Merci d'avance

    PS: A titre indicatif, voilà à quoi peuvent ressembler les données de sessions sérialisées par PHP :
    SESSION|N;UTIL|a:12:{s:6:"I_UTIL";s:3:"929";s:3:"NOM";s:8:"LEVESQUE";s:5:"LOGIN";s:9:"tlevesque";s:6:"PRENOM";s:6:"Thomas";s:9:"I_SECTEUR";N;s:8:"I_PROFIL";s:1:"8";s:6:"I_LABO";N;s:9:"LIBPROFIL";s:5:"NOMAD";s:8:"I_REGION";N;s:9:"LIBREGION";N;s:5:"I_SUP";N;s:11:"I_CATALOGUE";s:1:"0";}IP|s:9:"127.0.0.1";ACCES|a:4:{s:6:"I_UTIL";N;s:9:"GEST_UTIL";s:1:"2";s:14:"GEST_CATALOGUE";s:1:"2";s:8:"I_PROFIL";s:1:"8";}
    D'ailleurs je n'ai pas trouvé les spécifications de ce format, si quelqu'un sait où trouver ça, ça m'intéresse !

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    J'ai trouvé une piste qui me semble pas mal :
    - côté PHP, j'utilise wddx comme handler de sérialisation pour les sessions (session.serialize_handler = wddx). Je stocke le wddx obtenu dans ma BDD en redéfinissant le session_save_handler
    - côté ASP.NET, j'utilise ce composant pour sérialiser et désérialiser les données de session wddx.
    J'ai pas encore fini de le mettre en place, mais ça devrait le faire...

    Par contre ce qui m'ennuie c'est que ce composant date de 2002 et je ne sais pas trop ce qu'il vaut en termes de fiabilité... heureusement le code source est dispo, donc en cas de souci je devrais pouvoir le corriger.

    Si quelqu'un à une meilleure idée pour partager les sessions entre PHP et ASP.NET, je reste ouvert à toute suggestion...

  3. #3
    Rédacteur
    Avatar de Paul Musso
    Profil pro
    Inscrit en
    Août 2008
    Messages
    368
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Août 2008
    Messages : 368
    Points : 443
    Points
    443
    Par défaut
    Bonjour,

    Juste une remarque par rapport au format de sérialisation utilisé en PHP, pour moi tu n'as pas assez d'info pour désérialiser les objets en ASP.Net. Peut-être que tu arrivera à désérialiser en string et en int, decimal, float, etc ... Mais pour les types complexes, à par créer des listes ou des tableaux de types primitifs, cela m'a l'air un peu compliqué.

    Je comprends aussi pourquoi tu veux utiliser le mécanisme avec les sessions, cela n'entraine qu'un impact localisé sur tes applis PHP et ASP.Net. Cependant, je me demande à quoi ressemble par exemple les informations d'authentification en session dans ASP.Net ...

    Il te faudra créer une espèce de logique qui transforme les variables d'authenfication PHP stockées en BDD dans le format compris par ASP.Net ... Et ça, ça m'a l'air un peu tendu.

    Peut-être, faut-il mieux développer un peu de logique au niveau de l'authentification ASP.Net pour aller chercher des infos bien spécifiques dans la bdd par exemple, ces infos étant insérés en PHP.

    Je sais pas si je me fais bien comprendre ...

    [EDIT] Je viens de lire ta 2eme réponse, fait moi signe si ça marche

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    merci de ta réponse

    Citation Envoyé par Paul Musso Voir le message
    Cependant, je me demande à quoi ressemble par exemple les informations d'authentification en session dans ASP.Net ...
    En fait, je ne vais pas utiliser le mécanisme d'authentification d'ASP.NET pour l'instant. Je le ferai sans doute quand la migration sera terminée, mais pour l'instant je vais garder le mécanisme qu'on utilise déjà en PHP. Donc je vérifierai dans la session si l'utilisateur est bien authentifié...

    Citation Envoyé par Paul Musso Voir le message
    [EDIT] Je viens de lire ta 2eme réponse, fait moi signe si ça marche
    Ca semble pas mal du tout. Les sessions sont enregistrées sous la forme suivante :
    <wddxPacket version='1.0'><header/><data><struct><var name='SESSION'><null/></var><var name='UTIL'><struct><var name='I_UTIL'><string>929</string></var><var name='NOM'><string>LEVESQUE</string></var><var name='LOGIN'><string>tlevesque</string></var><var name='PRENOM'><string>Thomas</string></var><var name='I_SECTEUR'><null/></var><var name='I_PROFIL'><string>8</string></var><var name='I_LABO'><null/></var><var name='LIBPROFIL'><string>NOMAD</string></var><var name='I_REGION'><null/></var><var name='LIBREGION'><null/></var><var name='I_SUP'><null/></var><var name='I_CATALOGUE'><string>0</string></var></struct></var><var name='IP'><string>127.0.0.1</string></var><var name='ACCES'><struct><var name='I_UTIL'><null/></var><var name='GEST_UTIL'><string>2</string></var><var name='GEST_CATALOGUE'><string>2</string></var><var name='I_PROFIL'><string>8</string></var></struct></var></struct></data></wddxPacket>
    Le composant que j'ai trouvé me désérialise ça sous forme d'une Hashtable, qui contient elle-même d'autres Hashtables, etc. Ce qui correspond tout à fait à ce que j'ai en PHP

    Par contre pour l'implémentation de SessionStateStoreProviderBase, c'est pas encore gagné, mais j'ai bon espoir.

  5. #5
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Pour info, au cas où quelqu'un aurait besoin de faire la même chose...

    Pour le SessionStateStoreProvider côté ASP.NET, j'ai repris le code fourni ici :
    http://msdn.microsoft.com/en-us/libr...89(VS.80).aspx
    J'ai juste modifié :
    - le code d'accès à la base pour utiliser MySQL à la place d'ODBC
    - les méthode Serialize et Deserialize pour utiliser le sérialiseur WDDX

    Il faut aussi créer un SesssionIDManager qui récupère le PHPSESSID dans le cookie (ou le génère s'il n'est pas défini)

    On indique quel SessionStateStoreProvider et SessionIDManager utiliser dans l'élément sessionState du web.config

    Côté PHP, il faut changer le sérialiseur de session dans php.ini :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    session.serialize_handler = wddx
    Et avant le session_start, il faut appeler session_set_save_handler en passant en paramètre les fonctions qu'on a défini pour enregistrer les données de session en base

    Par contre cette méthode a quelques limites :
    - Les objets mis en session doivent être sérializables (je ne sais pas trop quelles sont les limites du sérialiseur WDDX, en tous cas les objets "simples" et les hashtables fonctionnent)
    - Les sessions en ASP.NET utilisent un système de lock pour gérer les accès concurrents aux données de session, alors que PHP ne gère pas ça

    Si ça intéresse quelqu'un je posterai le code dans la semaine (je suis chez moi donc je ne l'ai pas sous la main)

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

Discussions similaires

  1. dialogue HTTP entre PHP et ASP.NET
    Par sandes84 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 0
    Dernier message: 18/03/2012, 13h15
  2. diference entre php et asp
    Par Info-avanvé dans le forum ASP.NET
    Réponses: 3
    Dernier message: 09/09/2011, 19h27
  3. Trouver les mêmes fonctions entre php et asp.
    Par jmdubdub dans le forum ALM
    Réponses: 0
    Dernier message: 06/05/2010, 17h22
  4. [MySQL] Format de date différent entre PHP et ASP
    Par lekev62 dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 30/06/2009, 12h36
  5. Variable de session php vers asp.net
    Par vertigo_76 dans le forum Langage
    Réponses: 1
    Dernier message: 17/02/2009, 18h15

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