2009-01-14 11 views
10

Sto costruendo un sito in asp.net e ho più sottodomini. Ad esempio, one.cookies.com two.cookies.comsincronizzare i cookie e le sessioni in diversi sottodomini (asp.net)

Desidero che i miei utenti siano in grado di accedere a entrambi i sottodomini e di aver effettuato l'accesso per entrambi i siti Web. Inoltre, mi piacerebbe che le sessioni e i cookie fossero sincronizzati. Finora non ho trovato un modo affidabile per farlo.

+0

Check out questa risposta: http://stackoverflow.com/a/3774627/8360, è molto più succinta, che, fondamentalmente, basta aggiungere ' 'per il tuo web.configs. –

risposta

8

Quando si crea il cookie è possibile impostare il dominio:

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

Questo permetterà il cookie di essere accessibile da tutti i sottodomini di cookies.com.

Se si utilizza FormsAuthentication quindi è possibile impostare il dominio per il cookie di autenticazione in web.config:

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

Si ricorda che per il single sign-on di lavorare su più sottodomini le applicazioni ASP.NET deve condividere lo stesso machine keys come spiegato in questo CodeProject article.

La condivisione di sessioni tra diversi sottodomini (diversi processi di lavoro) è più difficile perché le sessioni sono vincolate a un'applicazione e sarà necessario implementare un meccanismo di sincronizzazione di sessione personalizzato.

+8

Il dominio dovrebbe essere ".cookies.com" e non "cookies.com" – ErJab

1

Sì, è necessario utilizzare ".cookies.com" non 'cookies.com'

+0

Sei sicuro? Controlla questo [http://msdn.microsoft.com/en-us/library/ms178194.aspx], mostra Response.Cookies ["dominio"]. Dominio = "contoso.com"; quindi dice "Il cookie sarà quindi disponibile per il dominio principale e per i domini sales.contoso.com e support.contoso.com." –

9

Se si desidera sincronizzare la sessione di ASP.NET e non si utilizza forme di autenticazione (ad esempio, il tuo sito non ha accesso), prova ad aggiungere il seguente codice al tuo file Globals.asax. Questo ha funzionato come un campione per me e mi ha salvato un serio dolore.

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  
} 

ho trovato questo originariamente postato qui: http://www.know24.net/blog/ASPNET+Session+State+Cookies+And+Subdomains.aspx

Problemi correlati