2009-01-14 27 views
10

Estoy construyendo un sitio en asp.net y tengo varios subdominios. Por ejemplo, one.cookies.com two.cookies.comsincronizar cookies y sesiones en diferentes subdominios (asp.net)

Deseo que mis usuarios puedan iniciar sesión en cualquiera de los subdominios e inicien sesión en ambos sitios web. Además, me gustaría que las sesiones y las cookies estén sincronizadas. Hasta ahora no he encontrado una manera confiable de hacer esto.

+0

Salida esta respuesta: http://stackoverflow.com/a/3774627/8360, es mucho más breve, que, básicamente, sólo tiene que añadir ' 'a su web.configs. –

Respuesta

8

Cuando se crea la cookie puede configurar el dominio:

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

Esto permitirá que su cookie para ser accesible desde todos los subdominios de cookies.com.

Si está utilizando FormsAuthentication entonces se puede establecer el dominio de la cookie de autenticación en web.config:

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

Recuerde que para el inicio de sesión único para trabajar en varios subdominios sus aplicaciones ASP.NET debe comparte el mismo machine keys como se explica en este CodeProject article.

Compartir sesiones entre diferentes subdominios (procesos de trabajo diferentes) es más difícil porque las sesiones están restringidas a una aplicación y tendrá que implementar un mecanismo de sincronización de sesión personalizado.

+8

El dominio debe ser ".cookies.com" y no "cookies.com" – ErJab

1

Sí, es necesario utilizar ".cookies.com" no 'cookies.com'

+0

¿Estás seguro? Mira esto [http://msdn.microsoft.com/en-us/library/ms178194.aspx], muestra Response.Cookies ["dominio"]. Domain = "contoso.com"; luego dice "La cookie estará disponible para el dominio principal, así como para los dominios sales.contoso.com y support.contoso.com". –

9

Si desea sincronizar la sesión ASP.NET y que no esté utilizando formas de autenticación (por ejemplo, su sitio no tiene inicio de sesión), intente agregar el siguiente código a su archivo Globals.asax. Esto funcionó como un campeón para mí y me salvó un gran dolor.

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  
} 

yo encontramos este originalmente publicado aquí: http://www.know24.net/blog/ASPNET+Session+State+Cookies+And+Subdomains.aspx

Cuestiones relacionadas