Bonjour,
Je viens vers vous car j'ai un problème avec l'authentification ASP.NET sur mon site Internet. Cela fait plusieurs semaines que je cherche, mais toujours le même problème.
Je souhaite à faire en sorte que mes utilisateurs n'est pas à se relogguer constamment, comme sur Codes-Sources, afin de rendre la navigation agréable.
J'utilise l'authentification ASP.NET par login.
Après avoir vérifié l'authenticité des informations d'identification saisie par l'utilisateur, je crée un tocket d'authentification de 4 ans, et un cookie de 4 ans, si l'utilisateur souhaite que le site se souvienne de lui :
if
(Membership.ValidateUser(login_form.UserName, login_form.Password)){
FormsAuthenticationTicket ticket = newFormsAuthenticationTicket(1, login_form.UserName,
DateTime.Now, DateTime.Now.AddYears(4), login_form.RememberMeSet,
"", FormsAuthentication.FormsCookiePath); string encryptedTicket = FormsAuthentication.Encrypt(ticket); HttpCookie cookie = newHttpCookie(FormsAuthentication.FormsCookieName, encryptedTicket); if (ticket.IsPersistent) cookie.Expires = ticket.Expiration;
Response.Cookies.Add(cookie);
Response.Redirect(
FormsAuthentication.GetRedirectUrl(login_form.UserName, login_form.RememberMeSet));}
Ensuite dans le global.asax, je check le cookie et renouvelle le ticket de l'utilisateur, le cas échéant :
public
void FormsAuthentication_OnAuthenticate(object sender, FormsAuthenticationEventArgs args){
HttpCookie cookie = args.Context.Request.Cookies[FormsAuthentication.FormsCookieName];
if (cookie == null) { return; } FormsAuthenticationTicket Ticket = null; try {
Ticket =
FormsAuthentication.Decrypt(cookie.Value); }
catch {
return; }
if ((null == Ticket) || Ticket.Expired) {
return; }
FormsAuthenticationTicket Ticket2 = Ticket; if (FormsAuthentication.SlidingExpiration) Ticket2 =
FormsAuthentication.RenewTicketIfOld(Ticket); args.Context.User =
new System.Security.Principal.GenericPrincipal(newFormsIdentity(Ticket2), newstring[0]); if (Ticket2 != Ticket) {
string hash = FormsAuthentication.Encrypt(Ticket2); if (Ticket2.IsPersistent) cookie.Expires = Ticket2.Expiration;
cookie.Value = hash;
cookie.HttpOnly =
true; if (FormsAuthentication.CookieDomain != null) cookie.Domain =
FormsAuthentication.CookieDomain; args.Context.Response.Cookies.Add(cookie);
}
}
Malgrès tout ça, mes utilisateurs doivent se relogguer toutes les 24 heures en moyenne. Sérieux là je n'y comprend vraiment rien, mon code me paraît juste.
Désolé pour la tartine de code, mais là il me faut de l'aide :)
Cordialement,
Bidou_01
[ Lien ] |
[ Lien ]