2012-01-13 3 views
15

Utilizzo ASP.NET MVC 3, con autenticazione moduli (basata sul codice account vaniglia modificato ottenuto con file-> nuovo).Perché il mio cookie di autenticazione persistente ASP.NET MVC non funziona?

Quando si accede, io pongo un cookie di autenticazione con

FormsAuthentication.SetAuthCookie(userName, true); 

Quindi questo dovrebbe impostare un cookie persistente. Ma se chiudo il browser e riapro, quando navigo sul sito sono costretto ad accedere di nuovo! Posso vedere usando gli strumenti di chrome dev che il cookie (.ASPXAUTH) è stato creato e che non viene eliminato quando chiudo il browser, quindi cosa sta succedendo?

mio web.config:

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

sto testando questo a livello locale, in IIS se questo fa alcuna differenza.

+1

è possibile controllare questa risposta: http://stackoverflow.com/questions/682788/making-user-login-persistant-with-asp-net-membership – alexl

+2

Ok, questo collegamento sembrava ordinarlo per me - attaccare con SetAuthCookie e modificando la mia configurazione per impostare esplicitamente il nome del cookie (nel web.confg), e tutto funziona ora. Strano! –

+0

@ Rober Roberts - Non ho idea del perché, ma l'impostazione del nome del cookie lo ha risolto anche per me. Penseresti che funzionerebbe solo con il cookie essendo specifico del dominio, ecc. Si tratta forse di un bug in MVC o .NET? – Greg

risposta

3

risolto dal commento da @alexl:

è possibile controllare questa risposta: Making user login persistant with ASP .Net Membership

Ok, questo link sembrava di ordinare per me - attaccare con SetAuthCookie e tweaking mia configurazione per impostare in modo esplicito il nome del cookie (nel web.confg), e tutto funziona ora. Strano! -

8

Farei meglio a creare un cookie utilizzando il ticket di autenticazione. SetAuthCookie crea un ticket di autenticazione sotto il cofano. Hai provato a creare il tuo biglietto di autenticazione? È che ti consente di memorizzare ulteriori dati su di esso.

Ecco un esempio:

// 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); 

Spero che questo aiuti.

+0

Grazie. Quindi non dovrei usare SetAuthCookie? La documentazione MSDN mi dice di usarlo per creare un cookie di autenticazione che può essere persistente. Inoltre, il codice vanilla per una nuova app MVC utilizza SetAuthCookie - è sbagliato? –

+0

SetAuthCookie() sta facendo lo stesso a livello globale. È strano perché sembra che non funzioni tutto il tempo. Preferisco creare myslef un ticket di autenticazione e aggiungerlo al flusso di risposta. –

+0

controlla anche il link @alexl pubblicato come commento alla tua domanda. –