2010-02-24 10 views
17

De forma predeterminada, ASP.NET configurará sus cookies para usar "mydomain.com" como su base. Prefiero que usen "www.midominio.com" en su lugar, para que pueda tener otros subdominios "sub.midominio.com" que no contengan cookies.Cookies de sesión ASP.NET: especificando el dominio base

He estado investigando los objetos Session y Cookie, y aunque puedo encontrar cómo configurar el dominio para una sola cookie, no veo una manera de configurarlo para todas las cookies de sesión.

¿Alguien tiene alguna idea?

+0

Esto es exactamente lo contrario de mi experiencia. Se están creando nuevas cookies de sesión para cada uno de mis subdominios. Tal vez ha cambiado con una versión más reciente de ASP.NET? Estoy usando .NET 4. –

Respuesta

19

Crea un ISessionIDManager, ya que solo quieres cambiar el dominio de las cookies, dejaremos que el predeterminado haga todo el trabajo.

Esto se configura en web.config en el elemento sessionState bajo <system.web>.

<sessionState sessionIDManagerType="MySessionIDManager" /> 

Y la implementación.

public class MySessionIDManager: SessionIDManager, ISessionIDManager 
{ 
    void ISessionIDManager.SaveSessionID(HttpContext context, string id, out bool redirected, out bool cookieAdded) 
    { 
     base.SaveSessionID(context, id, out redirected, out cookieAdded); 

     if (cookieAdded) { 
      var name = "ASP.NET_SessionId"; 
      var cookie = context.Response.Cookies[ name ]; 
      cookie.Domain = "example.com"; 
     } 
    } 
} 
+1

se ve muy bien, pero no funcionó para mí. Este código fue capaz de mantener el mismo sessionid para todos los subdominios, pero los datos de las sesiones no se leyeron con éxito. – st78

+0

¡Funcionó muy bien para mí! Gracias. – spoulson

+0

¿No debería manejar también 'GetSessionId()' y 'RemoveSessionId()' ??? – user2173353

1

La sesión usa solo una cookie, ¿por qué no configura el dominio solo para la cookie ASP.NET_SessionId?

+0

5, en realidad, si incluye los _utm ... unos. Todos se envían por cada solicitud de imagen a cdn.mysite.com. Sería bueno si no tuviera que salir y registrarme en mysitecdn.com solo para evitar eso. –

+0

El registro de un "dominio sin cookies" no es tan infrecuente: [ASÍ lo hizo, por ejemplo] (http://sstatic.net/). – scherand

9

Comprendo que esto es una vieja pregunta, pero ¿podría utilizar el atributo domain de la sección de configuración httpCookies en lugar de hacer esto en código?

<httpCookies domain="String" 
      httpOnlyCookies="true|false" 
      requireSSL="true|false" /> 
+1

no parece tener un efecto en la cookie de sesión – Tarnschaf

+0

Ah, sí, es suficiente :) Gracias. –

+0

+1 ¡Esto funcionó para mí! Afectó a las cookies de sesión y de autenticación. – jkoreska

Cuestiones relacionadas