2013-08-06 12 views
8

Mi rendo conto che questa domanda potrebbe essere stata chiesta prima, ma non riesco a trovare nulla che corrisponda esattamente alla mia situazione."Ricordami" con le pagine web asp.net

Ho creato un sito Web utilizzando l'helper WebMail nelle pagine Web ASP.Net (non moduli Web) e WebMatrix. Gli utenti sono tenuti ad accedere al sito Web, e c'è una casella "Ricordami" che (in teoria) manterrà l'utente connesso fino a quando non sceglie di disconnettersi. Il sito Web tiene gli utenti collegati se chiude il browser e lo riapre entro 20-30 minuti. Tuttavia, dopo 20-30 minuti di non accesso al sito Web, l'utente viene disconnesso. (Per inciso, questo problema sembra esistere anche con il modello "Starter Site" di WebMatrix.)

Ho provato più soluzioni, molte delle quali sono state pubblicate su Stack Overflow, ma nulla sembra funzionare.

+0

Qual 'più soluzioni' hai provato? Aiuterebbe a sapere così non li ripeterò. – Artless

+0

Sfortunatamente, non ho salvato i tentativi che non hanno funzionato, quindi non posso dirti esattamente cosa ho provato. La maggior parte dei partecipanti ha cercato di creare un cookie a cui si potesse accedere dal mio sito Web, ma non sono sicuro di aver creato correttamente il cookie o se i miei tentativi di accesso fossero corretti. – CarolK

+0

Mi aspetto che da qualche parte in quel modello di codice, ci sia una condizione, che controlla la durata corrente di inattività della sessione. Guarda attraverso il codice di autenticazione e vedi se c'è un controllo orario o qualcosa di simile. – ZorleQ

risposta

10

EDIT 2

Il cookie utilizzato da autenticazione basata su form si chiama "ASPXAUTH" e di default impostato per scadere dopo 30 minuti.

Vai al tuo web.config e trova l'elemento authentication. È possibile impostare il tempo di scadenza del cookie (in minuti) lì, come ad esempio:

<system.web> 
    <authentication mode="Forms"> 
     <forms loginUrl="~/Account/Login" 
       name="myCookie"     <!-- optional, if you want to rename it --> 
       timeout="2880" />    <!-- expires in 48 hours --> 
    </authentication> 
</system.web> 

O

Se la configurazione si fallisce, provate questo articolo: Link

You' Dovrai cancellare tutti i ticket di autorizzazione esistenti e crearne uno personalizzato. Si riduce a questo pezzo di codice è necessario eseguire se l'utente ha selezionato l'opzione remember me:

if (rememberMe) 
    { 
     // Clear any other tickets that are already in the response 
     Response.Cookies.Clear(); 

     // Set the new expiry date - to thirty days from now 
     DateTime expiryDate = DateTime.Now.AddDays(30); 

     // Create a new forms auth ticket 
     FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(2, loginModel.UserName, DateTime.Now, expiryDate, true, String.Empty); 

     // Encrypt the ticket 
     string encryptedTicket = FormsAuthentication.Encrypt(ticket); 

     // Create a new authentication cookie - and set its expiration date 
     HttpCookie authenticationCookie = new HttpCookie(FormsAuthentication.FormsCookieName, encryptedTicket); 
     authenticationCookie.Expires = ticket.Expiration; 

     // Add the cookie to the response. 
     Response.Cookies.Add(authenticationCookie); 
    } 
+1

Esatto ma, alcuni hosting, non consentono il settaggio delle impostazioni e anche impostando la configurazione viene sovrascritto. – PiLHA

+0

A pensarci bene, impostare il timeout della sessione non sarebbe una buona soluzione. Il suo cookie scade semplicemente, quindi la soluzione corretta sarebbe quella di impostare il suo tempo di scadenza quando l'utente effettua il login. Aggiornamento della risposta. – Artless

+0

Quindi, Trickery, il codice mostrato sopra riflette la correzione? – CarolK

-1

è possibile creare manualmente un cookie (non in scadenza) che contiene un GUID che viene mappato l'utente. Quando l'utente effettua un GET alla pagina di accesso dell'utente, è possibile leggere quel cookie e controllare il guid e autenticare l'utente. controllare i link

http://msdn.microsoft.com/en-us/library/ms178194(v=vs.100).aspx

http://msdn.microsoft.com/en-us/library/78c837bd(v=vs.100).aspx

http://www.codeproject.com/Articles/31914/Beginner-s-Guide-To-ASP-NET-Cookies

Problemi correlati