2009-07-25 5 views
10

Frappe un roadblock lors de l'implémentation d'un sub domain based language switcher (en.domain.com charge l'anglais, jp.domain.com charge le japonais). Comment puis-je faire fonctionner un seul système d'appartenance dans plusieurs sous-domaines (ASP.NET MVC C#)?ASP.NET MVC - authentification/appartenance à un sous-domaine croisé

J'ai vu quelque chose à propos de l'ajout de domain="domain.com" à <forms > dans web.config. Cela a-t-il fonctionné, mais cela fonctionne-t-il lors des tests sur un serveur Web de développement de studio visuel local?

+0

double possible de [formulaires d'authentification dans les sous-domaines] (http://stackoverflow.com/questions/608120/forms-authentication-across-sub-domains) – rcdmk

Répondre

7

Essayez de créer le cookie vous-même.

Dans AccountController vous trouverez ceci:

FormsAuthentication.SetAuthCookie(userName, createPersistentCookie); 

que "crée et ajoute à la collection des cookies". Il ne permet pas la modification du domaine (mais permet de modifier le chemin, curieusement). créer à la place un cookie sans ajouter à la collection, modifier les propriétés nécessaires, puis ajouter à la collection:

var a = FormsAuthentication.GetAuthCookie(userName, createPersistentCookie); 
//if you're debugging right here, a.Domain should be en.example.com; change it 
a.Domain = "example.com"; 
HttpContext.Current.Response.Cookies.Add(a); 

James

+0

Excellente idée ... bien que j'ai déjà décidé de scrapper en utilisant des sous-domaines pour le choix de la langue, c'est un souvenir à retenir. Je vous remercie! – Chaddeus

+0

Cela n'a pas fonctionné pour moi. J'utilise EF6 MVC 4 ... avez-vous des conseils plz? – ilans

0

Votre problème est de savoir comment les navigateurs envoient des cookies pendant la requête.

Cookie est généralement lié à un seul domaine, ceci pour des raisons de sécurité et de performance. Par exemple, l'utilisateur ne souhaite pas envoyer de cookie pour votre domaine à un autre domaine, car votre cookie peut contenir des informations sensibles.

Le navigateur fait la différence entre les cookies définis avec en.domain.com et jp.domain.com. Ils n'autorisent pas les cookies d'un domaine à aller vers l'autre car ils ne sont pas sur un domaine parent.

La solution à votre problème serait de prendre le contrôle de la génération de cookies. Je n'ai pas beaucoup joué avec ASP.NET MVC, mais je suis sûr que cela peut être fait non pas à travers le HTML, mais à travers une propriété ou quelque chose. C'est un scénario très commun. Vous devez définir le domaine de cookies sur "domain.com" pour vos boîtes de production, c'est correct. Si vous travaillez sur une boîte locale, vous devez définir le domaine de cookies à "".

3

Vous devez utiliser le préfixe de points, comme celui-ci.

<authentication mode="Forms"> 
    <forms domain=".tv.loc" loginUrl="~/signin" timeout="2880" name="auth" /> 
</authentication> 
+1

aussi, cela ne fonctionne que pour les domaines de deuxième niveau ou supérieur, c'est-à-dire '.mydomain' ne fonctionne pas, mais' .mydomain.com' va –

+0

ça marche pour "localhost"? c'est-à-dire pour le débogage dans VS? Est-il également nécessaire de définir le domaine dans la balise de formulaire si vous définissez le domaine dans le cookie? – Rahatur

Questions connexes