2012-01-13 23 views
15

Estoy usando ASP.NET MVC 3, con autenticación de formularios (en función del código de cuenta modificado que se obtiene con el archivo-> nuevo).¿Por qué mi cookie de autenticación persistente ASP.NET MVC no funciona?

Cuando vuelve a entrar, me he fijado una cookie de autenticación con

FormsAuthentication.SetAuthCookie(userName, true); 

lo que este debe establecer una cookie persistente. Pero si cierro el navegador y vuelvo a abrir, cuando navego por el sitio me veo obligado a iniciar sesión de nuevo. Puedo ver usando herramientas chrome dev que la cookie (.ASPXAUTH) se está creando y no se borrará cuando cierro el navegador, entonces, ¿qué está pasando?

Mi web.config:

<authentication mode="Forms"> 
    <forms loginUrl="~/Account/LogIn" timeout="10000"/> 
</authentication> 

Estoy probando este localmente, bajo IIS si hay alguna diferencia.

+1

puede verificar esta respuesta: http://stackoverflow.com/questions/682788/making-user-login-persistant-with-asp-net-membership – alexl

+2

Ok, parece que este enlace lo ordenó para mí - pegado con SetAuthCookie y ajustar mi configuración para establecer explícitamente el nombre de la cookie (en el web.confg), y todo está funcionando ahora. ¡Extraño! –

+0

@Matt Roberts: no tengo idea de por qué establecer el nombre de la cookie también lo solucionó. Uno pensaría que simplemente funcionaría con la cookie como dominio específico, etc. ¿Es esto un error en MVC o .NET quizás? – Greg

Respuesta

3

Resuelto de comentario de @alexl:

puede comprobar esta respuesta: Making user login persistant with ASP .Net Membership

Ok, este enlace parecía a solucionar el problema para mí - pervivencia de SetAuthCookie y ajustar mi config para establecer explícitamente el nombre de la cookie (en el web.confg), y todo está funcionando ahora. ¡Extraño! -

8

Será mejor que me creara una cookie usando un ticket de autenticación. SetAuthCookie crea un ticket de autenticación debajo del capó. ¿Has intentado hacer tu propio boleto de autenticación? Es le permitirá almacenar datos adicionales en él.

He aquí un ejemplo:

// create encryption cookie   
FormsAuthenticationTicket authTicket = new FormsAuthenticationTicket(1, 
     userName, 
     DateTime.Now, 
     DateTime.Now.AddDays(90), 
     createPersistentCookie, 
     string.Empty); 

// add cookie to response stream   
string encryptedTicket = FormsAuthentication.Encrypt(authTicket);  
System.Web.HttpCookie authCookie = new System.Web.HttpCookie(FormsAuthentication.FormsCookieName, encryptedTicket); 
if (authTicket.IsPersistent) 
{  
     authCookie.Expires = authTicket.Expiration; 
} 
System.Web.HttpContext.Current.Response.Cookies.Add(authCookie); 

Espero que esto ayude.

+0

Gracias. Entonces, ¿no debería usar SetAuthCookie? La documentación de MSDN me dice que use eso para crear una cookie de autenticación que puede ser persistente. Además, el código estándar de una nueva aplicación MVC usa SetAuthCookie, ¿es eso incorrecto? –

+0

SetAuthCookie() está haciendo globalmente lo mismo. Es extraño porque parece que no funciona todo el tiempo. Prefiero crear un ticket de autenticación myslef y agregarlo a la secuencia de respuesta. –

+0

verifique también el enlace @alexl publicado como comentario de su pregunta. –

Cuestiones relacionadas