Il Login Control è molto utile ed anche molto utilizzato ma...il Remember Me non funziona proprio in maniera "automatica".
Per rendere il coockie "eterno" non bisogna impostare il
timeout del tag
forms nel Web.config a numeri altissimi e non serve neanche usare codice come questo :
FormsAuthentication.RedirectFromLoginPage(Username.Text, true);
o
FormsAuthentication.SetAuthCookie(Username.Text, true);
in entrambi i casi il coockie durerà al max il valore impostato in timeout, che di default è 30 minuti.
Se volessi un coockie che duri un anno????
Calcolo i minuti che ci sono in un anno e lo imposto nel timeout????....bhè provateci!
Ecco la soluzione :
if (Membership.ValidateUser(Username.Text, Password.Text))
{
FormsAuthenticationTicket tkt;
string cookiestr;
HttpCookie ck;
tkt = new FormsAuthenticationTicket(1, Username.Text, DateTime.Now, DateTime.Now.AddMonths(12), this.RememberMe.Checked, "user");
cookiestr = FormsAuthentication.Encrypt(tkt);
ck = new HttpCookie(FormsAuthentication.FormsCookieName, cookiestr);
if (this.RememberMe.Checked)
ck.Expires = tkt.Expiration;
ck.Path = FormsAuthentication.FormsCookiePath;
Response.Cookies.Add(ck);
string strRedirect;
strRedirect = Request["ReturnUrl"];
if (strRedirect == null)
strRedirect = "URL vostro";
Response.Redirect(strRedirect);
}
else
{
//Fate voi!
}
In poche parole prima bisogna creare un oggeto di tipo FormsAuthenticationTicket con le caratteristiche che ci interessano, come, ad esempio, expiration e dopo lo criptiamo e creiamo un nuovo coockie con la stringa criptata. A questo punto, se il RememberMe è a True, impostiamo la data di validità del coockie uguale a quella del ticket, altrimenti, il coockie scadrà al termine del timeout previsto. Come passo finale aggiungiamo all'oggetto Response il coockie creato ed effettuiamo il redirect in base alla richiesta!
Enjoy it!