2010-09-24 8 views
3

Existe-t-il une solution .NET appropriée pour fournir des sessions de serveur persistantes sur plusieurs domaines?Sessions ASP.NET sur plusieurs domaines

à savoir si un utilisateur du site se connecte sous www.site1.com, ils seront alors également être connecté sous www.site2.com

La sécurité est un problème avec le programme, nous travaillons ..

Merci!

+0

Même application, même serveur? Domaine entièrement différent ou juste un sous-domaine différent? –

+0

Les sessions sont liées au domaine/à l'application si je me souviens bien et toutes les solutions impliquées dans les hacks avec SQL Server et les sprocs/tables. – Lloyd

+0

Pourquoi les gens continuent d'essayer de faire des hacks pour cela? Créez simplement un serveur "tiers" intermédiaire, où vous pouvez gérer l'authentification unique au même endroit. ie site1 redirige vers page sur site3 (auth), se connecte, redirigé vers le site. Ensuite, si cet utilisateur va sur site2, il vérifie avec site3 (auth) s'il a une session, s'il le fait, il se connecte. La session est stockée sur site3. Comme fonctionne OAuth. Qu'est-ce qui ne va pas avec ça? – RPM1984

Répondre

0

Essayez d'utiliser la fonction canonique URL de nom d'hôte Réécriture de l'URL IIS 7.5 Réécrire 2 Module: Download

(Cette réponse repose sur les deux URL ont des entrées HostHeader pour la même application Web)

1

Vous pouvez commencer ici au lieu de piratage dans la base de données ASPState (possible, mais je ne le recommande pas): http://www.codeproject.com/KB/session/sharedsession.aspx

Fondamentalement vous définissez le AppDomain pour être le même pour les deux www.site1.com & www.site2.com en utilisant la réflexion.

Vous aussi mai besoin d'AppPath aussi, nous avions besoin, mais notre configuration était légèrement différente de ce que vous avez. Nous avons ajouté:

 FieldInfo appDomainInfo = typeof(HttpRuntime).GetField("_appDomainId", BindingFlags.Instance | BindingFlags.NonPublic); 
     appDomainInfo.SetValue(theRuntime, "/LM/W3SVC/1/ROOT/A_Website_Name_Here"); 
1

Le mot 'session' peut être un peu déroutant dans ASP.NET.

Si vous parlez de sécurité (authentification et autorisation), vous recherchez probablement une solution d'authentification unique. En d'autres termes, lorsqu'un utilisateur se connecte à un site, il ne sera pas invité à se connecter à un autre site associé. Jetez un oeil à Windows Identity Foundation, OAuth, Jasig CAS. CAS est ma solution préférée (je suis un développeur sur le client .NET), mais le serveur est écrit en Java et vous aurez besoin d'une certaine expertise avec Java pour le configurer comme vous le souhaitez.

Dans ASP.NET, l'état de session est un composant complètement distinct de l'authentification et de l'autorisation (bien qu'il puisse dépendre du résultat de l'étape d'authentification). Si vous tentez de partager des informations entre les deux sites (le contenu du panier), vous pouvez soit configurer les deux domaines pour utiliser la même base de données en tant que fournisseur de session (google aspnet_regsql -ssadd), soit stocker les données dans une base de données c'est accessible par les deux.

Pour plus d'informations sur la raison pour laquelle je souligne la distinction, de vérifier cela: http://www.codeproject.com/KB/aspnet/ASPDOTNETPageLifecycle.aspx

Bonne chance.

Questions connexes