Session multi-domaines

Comme le fait google avec ses services (Youtube, goo.gl, ...)

L'auteur de ce sujet a trouvé une solution à son problème.
Auteur du sujet

Bonjour, Ça fait un petit moment déjà que je bloque sur le problème et ne trouve pas de réponse à ma question.

Se que je souhaiterais faire, c'est avoir un domaine "accounts.domaine.xy", et que ce soit le domaines gérant toutes les connexions.

Pour le moment, j'ai réussi à créer la connexion avec sur le même domaines et sous-domaines avec se système. Maintenant j'aimerais pouvoir me connecter avec www.domaine2.xy, et la je bloque.

J'avais au par-avant déjà demander sur openclassrooms, les seuls réponse que j'ai obtenu sont "Impossible, ça te sert à rien, …" Un peu décourageant, surtout que ce n'est pas impossible puisque Google le fait.

Je ne sais pas s'il faut passer par une api ou un truc du genre ? (Si oui, auriez vous des tutos sur comment faire)

J'ai également une autre question, j'ai un fichier "accounts.php" que je souhaiterais inclure dans toutes les pages (Il vérifirait si connecté ou non, le nombre de page afficher, accès administrateur ou non, etc.) mais comme je sais qu'il est impossible de faire un include PHP depuis un autre domaines (Retourne du HTML), je ne sais pas trop comment faire. Pour le moment, j'ai seulement réussi à faire avec les sous-domaines avec une solution temporaire (Comme je suis sur serveur mutualisé, je suis remonté à la source de tous les fichiers pour aller chercher dans un sous-domaine) (Car le but serait d'avoir une seule version à un seul endroit. Dans le domaine accounts.domaine.xy par exemple)

En vous remerciant, WinXaito.

Édité par WinXaito

+0 -0

Cette réponse a aidé l'auteur du sujet

Bonjour WinXaito,

C'est pas simple. Je vais essayer de t'aider en te proposant deux solutions, mais je ne l'ai jamais fait.

Première solution

Le mécanisme des sessions fonctionne avec un cookie. Le site dépose un cookie sur le navigateur en spécifiant le domaine, le chemin et la durée. De son côté, le serveur conserve les données de session associés à ce cookie. Lorsque le visiteur revient sur ce domaine, il réémet le cookie afin que le serveur puisse recharger les données de session associées.

Par exemple, les sessions de PHP utilisent un cookie appelé "PHPSESSID".

La fonction setcookie() de PHP permet de définir la durée et le domaine associé à un cookie.

Il est donc possible de faire redéfinir le domaine comme ceci :

1
setcookie('PHPSESSID', $_COOKIE['PHPSESSID'], time()+3600, '/', 'www.domaine2.xy');

Ainsi, lorsque le visiteur ira sur l'autre domaine, il pourra réémettre le cookie afin de permettre son identification.

Maintenant, tout la difficulté consiste à recharger les données de session. Si les deux domaines font référence au même serveur physique, je suppose que ces données sont rechargées automatiquement par la fonction session_start(). S'il s'agit de deux serveurs différents, la manipulation risque d'être plus compliquée car tu devras faire un transfert des données de session d'un serveur à l'autre.

Deuxième solution

Si cela ne fonctionne pas, tu peux recréer le principe des sessions par toi même en utilisant ton propre cookie portant pour valeur le nom d'un fichier texte comportant les données de session du visiteur. Lorsque le visiteur ira sur ton deuxième site, s'il te réémet ton cookie est tu n'as pas le fichier texte comportant les données de session, tu peux télécharger avec PHP le fichier de sessions depuis le premier serveur et ainsi reconstruire ta session.

Cette méthode devrait passer par un chiffrement pour éviter l'utilisation des données de session par un personne malintentionnée. Tu peux aussi filtrer l'autorisation du fichier selon l'IP.

Mon aide n'est sans doute pas des plus précieuses, c'est un sujet que je ne maitrise pas bien.

Un fichier unique pour deux sites

Là encore, il faut passer par un téléchargement si le fichier d'origine est susceptible de changer. Pour éviter l'interprétation de fichier, tu peux créer un script PHP qui vient lire le contenu de ton fichier à télécharger et l'affiche dans une page. Ainsi tu pourras le télécharger. Là encore il faut passer par un chiffrement et un filtrage par IP.

Mon avis dans tout ça

Dans tout cela, j'y vois beaucoup de dépendances. Or, plus un système a besoin de sous-système pour fonctionner, plus il a de risque de tomber en panne à la moindre défaillance de l'un de ses sous-systèmes.

Dans la résolution de ton premier problème, je pense qu'il serait plus judicieux, si c'est le même site, de mettre toutes tes pages sous le même domaine.

Et pour ce qui est de ton second problème, je pense qu'il est préférable, si c'est possible, de laisser ces deux fichiers totalement indépendant l'un de l'autre, même s'il sont identique. D’autant plus que si c'est un include, il ne devrait pas être modifié souvent.

N’aurais-tu pas tout intérêt à héberger tout cela sous le même domaine ?

+2 -0
Auteur du sujet

Salut, Déjà merci beaucoup de ta réponse.

N’aurais-tu pas tout intérêt à héberger tout cela sous le même domaine ?

Si je pourrais bien sur, mais mon but étais de découvrir un peu comment google ou microsoft faisait car ça m'intrigue énormément. Donc c'est plus moral qu'autre chose.

Ensuite, pour ta première et deuxième solution, ça part d'une bonne intention, mais le problème est qu'un site ne peux pas enregistrer de cookie sur un autre site.

Et pour le fichier unique, peut-être qu'en faites j'en ai pas besoin, ce que je cherchais à comprendre, c'est comment faisait les grands site pour rediriger les utilisateurs sur différents serveur ? Car j'ai pu remarquer, en allant sur Mon-ip.com qu'en entrant google.com, il y avait une ip et un nom d’hôte. Mais à chaque fois (ou presque) que l'on clique sur "Envoyer", l'ip ou le nom d’hôte change, preuve que l'on est envoyé sur différent serveur.

(Chose très surprenante, en mettant "Obtenir la liste des sites web sur ce serveur", il y avait "en.wikipedia.org" … Je comprend pas la. Ça signifie que Wikipedia est hébergé par google ?)

+0 -0

Cette réponse a aidé l'auteur du sujet

Salut,

A ma connaissance, les API Facebook utilisent OAuth (bon, d'après Wiki, OAuth c'est pas pour l'authentification globale) , Google et Microsoft je ne sais pas. Sinon, il existe aussi le CAS, qui repose sur un système d'authentification au choix (Active Directory, LDAP, RADIUS, X509…). Tu te connectes une fois sur le serveur du CAS, et ensuite tous les sites vont demander au CAS si le visiteur est bien authentifié. Je connais une implémentation du CAS : Jasig, mais il y en a d'autres.

Ensuite, attention, ce n'est pas parce que tu vas sur plusieurs IP de Google (ce qui m'aura d'ailleurs fait découvrir le round robin DNS) que tu n'as rien en commun. J'imagine que toutes les variables serveur (notamment les variables sessions, et les identifiants des cookies) sont partagées entre les serveurs sur une grosse base de données décentralisée, à la NoSQL comme on les aime (ou pas). Je ne sais pas comment sont envoyés les cookies lors d'une requête HTTP. Si c'est selon la DNS comme je l'imagine, aucun souci, le serveur qui recupere ta requete aura juste a puiser dans les variables communes au 10 serveurs google.com.

+1 -0
Vous devez être connecté pour pouvoir poster un message.
Connexion

Pas encore inscrit ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte