2009-01-14 10 views
10

Ich baue eine Website in asp.net und haben mehrere Subdomains. Beispiel: one.cookies.com two.cookies.comSync Cookies und Sitzungen in verschiedenen Subdomains (asp.net)

Ich möchte, dass sich meine Benutzer bei jeder Subdomain anmelden und bei beiden Websites angemeldet sein können. Darüber hinaus möchte ich, dass die Sitzungen und Cookies synchron sind. Bisher habe ich keinen zuverlässigen Weg gefunden, dies zu tun.

+0

diese Antwort Check out: http://stackoverflow.com/a/3774627/8360, es ist viel knapper, Sie im Grunde nur 'add 'zu Ihren web.configs. –

Antwort

8

Beim Erstellen des Cookies Sie die Domäne festlegen:

HttpCookie cookie = new HttpCookie("name", "value"); 
cookie.Domain = "cookies.com"; 

Diese Ihrer Cookie von allen Unterdomänen von cookies.com zugänglich sein ermöglicht.

Wenn Sie FormsAuthentication verwenden, dann können Sie die Domäne für die Auth Cookie in web.config gesetzt:

<forms name=".ASPXAUTH" 
     loginUrl="login.aspx" 
     defaultUrl="default.aspx" 
     protection="All" 
     timeout="30" 
     path="/" 
     requireSSL="false" 
     domain="cookies.com"> 
</forms> 

Denken Sie daran, dass für die Single Sign-On auf mehrere Subdomains Anwendungen Ihre ASP.NET arbeiten muss teilen Sie die gleiche machine keys wie in diesem CodeProject article erläutert.

Das Teilen von Sitzungen zwischen verschiedenen Subdomains (verschiedenen Worker-Prozessen) ist schwieriger, da Sitzungen auf eine Anwendung beschränkt sind und Sie einen benutzerdefinierten Sitzungssynchronisationsmechanismus implementieren müssen.

+8

Die Domain sollte ".cookies.com" und nicht "cookies.com" lauten. – ErJab

0

Ich glaube, machen Sie den Cookie für http://cookies.com. (Keine Sub-Domain oder www aufgeführt)

1

Ja, Sie brauchen „.cookies.com“ nicht ‚cookies.com‘

+0

Sind Sie sicher? Überprüfen Sie dies [http://msdn.microsoft.com/en-us/library/ms178194.aspx], es zeigt Response.Cookies ["Domäne"]. Domain = "contoso.com"; sagt dann: "Der Cookie ist dann sowohl für die primäre Domain als auch für die sales.contoso.com und support.contoso.com Domains verfügbar." –

9

Wenn Sie die ASP.NET-Sitzung synchronisieren verwenden möchten und Sie verwenden keine Authentifizierung Formen (zum Beispiel Ihre Website hat keine Anmeldung), versuchen Sie, den folgenden Code zu Ihrer Globals.asax-Datei hinzuzufügen. Das funktionierte wie ein Champion für mich und ersparte mir einige ernste Trauer.

protected void Application_PreRequestHandlerExecute(Object sender, EventArgs e) 
{ 
    /// only apply session cookie persistence to requests requiring session information 
    #region session cookie 

    if (Context.Handler is IRequiresSessionState || Context.Handler is IReadOnlySessionState) 
    { 
    /// Ensure ASP.NET Session Cookies are accessible throughout the subdomains. 
    if (Request.Cookies["ASP.NET_SessionId"] != null && Session != null && Session.SessionID != null) 
    { 
     Response.Cookies["ASP.NET_SessionId"].Value = Session.SessionID; 
     Response.Cookies["ASP.NET_SessionId"].Domain = ".know24.net"; // the full stop prefix denotes all sub domains 
     Response.Cookies["ASP.NET_SessionId"].Path = "/"; //default session cookie path root   
    } 
    } 
    #endregion  
} 

fand ich dies ursprünglich hier veröffentlicht: http://www.know24.net/blog/ASPNET+Session+State+Cookies+And+Subdomains.aspx

Verwandte Themen