2010-04-23 11 views
7

J'ai vu quelques réponses à ce sujet sur SOF, mais la plupart d'entre eux sont concernés par l'utilisation de sous-domaines, dont aucun n'a travaillé pour moi. Le commun étant que l'utilisation de session.cookie_domain, qui à mon avis ne fonctionnera qu'avec des sous-domaines.Sessions partagées PHP à travers domaine

Je suis intéressé par une solution qui traite des offres avec des domaines entièrement différents (et inclut la possibilité de sous-domaines). Malheureusement, les délais du projet étant ce qu'ils sont, le temps n'est pas de mon côté, alors je me tourne vers l'expertise et l'expérience des SOF. Le projet actuel est de pouvoir se connecter à un site qui ne stocke actuellement que le user_id dans la session et de pouvoir récupérer cette valeur sur un autre domaine dans le même environnement serveur. Les données de session sont stockées/extraites d'une base de données où session id est la clé primaire. Je souhaite trouver une solution "légère" et "facile" à implémenter.

Le système utilise un modèle de conception Model View Controller interne, de sorte que toutes les demandes (y compris les différents domaines) sont exécutées via un seul script bootstrap. L'utilisation du nom de domaine en tant que variable détermine le contexte à afficher pour l'utilisateur.

Une option qui semblait avoir du potentiel est l'utilisation d'une image cachée et l'utilisation de la balise alt pour définir user id. Mes premières impressions suggèrent que cela semble immédiatement "trop ​​facile" (si possible) et criblé de failles de sécurité. Disscuss?

Une autre option que j'ai envisagée est l'utilisation de l'IP et de l'agent utilisateur pour l'authentification, mais encore une fois je pense que cela ne sera pas une option fiable en raison des réseaux partagés et des adresses IP changeantes. Ma troisième option (et préféré) que j'ai considéré et qui n'a pas encore été discutée utilise htaccess pour tromper l'utilisateur en lui faisant croire qu'ils sont sur un domaine différent quand infache redirige; quelque chose comme

www.foo.com/index.php?domain=bar.com&controller=news/categoires/1
mais affiche à l'utilisateur comme
www.bar.com/news/categories/1

foo.com représente le « domaine principal du site » qui toutes les demandes sont gérées par et bar.com est ce que l'utilisateur pense qu'ils accèdent. La demande du contrôleur dicte la page et la vue à demander. Est-ce possible?

Existe-t-il d'autres options? Avantages/inconvénients?

Merci d'avance !!!

+0

Désolé oublié de mentionner, je le système en cours d'exécution sur place (avec XAMPP). J'utilise un mélange de noms de domaine locaux (fichier hôte édité) et de domaines hébergés par fasthost pour transférer vers mon adresse IP. Juste pensé que cela vaut la peine de mentionner que cela affecte mes tests actuels. – bigstylee

Répondre

-3

Pour le bénéfice de toute personne intéressée par cette fonctionnalité, il n'y a pas de réponse simple j'ai peur. Google "Single Sign On" et il reviendra avec la technologie et certaines solutions disponibles. En ce qui concerne l'utilisation de htaccess pour masquer le nom de domaine, cela n'est pas possible car il pourrait être utilisé pour des activités malveillantes.

J'ai maintenant implémenté avec succès un système pour répondre à mes besoins.

+1

Ceci n'est pas une réponse. Tu ne nous dis pas ce que tu as fait. – Flimzy

0

Avez-vous pensé à utiliser session_set_save_handler? Vous pouvez stocker vos sessions dans une base de données et y accéder depuis n'importe quel domaine.

+1

J'utilise ceci. Le problème est que le session_id généré par PHP est différent pour chaque domaine. – bigstylee

+0

pouvez-vous pas identifier l'utilisateur par l'ID de session? utilisez une colonne différente dans la table. Vous aurez plusieurs lignes pour chaque utilisateur, mais vous pouvez définir une ligne à la même valeur. Je n'ai jamais fait ça avant, juste jeter des trucs là-bas. – Galen

+1

foo.com donne un identifiant de session de ABC123 et bar.com donne un identifiant de session de QWERTY. Sauf si je compare IP/UserAgent il n'y a aucun moyen (que je sache) de savoir que ABC123 et QWERTY pointent vers le même utilisateur. La requête de base de données qui récupère les données de session est SELECT * FROM sessions WHERE identificateur de session = "% string". Ou ai-je manqué le point Youtr? – bigstylee

0
  1. Définir un serveur de session principale (je le fais en combinaison avec memcached)

  2. utiliser Ajax/JSON (P) pour demander une session de ce serveur, ce qui vous permet de partager des sessions sur plusieurs domaines

  3. réutilisation cette session