Je dois accéder aux cookies pour obtenir l'utilisateur et le mot de passe, puis les définir dans les zones de texte de la vue Login car cette case est cochée "Se souvenir de moi ".C# MVC 5 Le cookie de ticket est effacé lorsque l'authentification de formulaire se déconnecte
méthode LogOff
public ActionResult LogOff()
{
//Session.Abandon();
// sign out.
FormsAuthentication.SignOut();
return RedirectToAction("Index", "Login");
}
Initialisation des sessions et cookies après une connexion réussie.
private void InitializeSessionVariables(AgentDTO user)
{
// SessionModel.AgentId = user.ID;
Response.Cookies.Clear();
FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(1,user.MobilePhone,DateTime.Now,DateTime.Now.AddDays(30),true,"",FormsAuthentication.FormsCookiePath);
// Encrypt the ticket.
string encryptedTicket = FormsAuthentication.Encrypt(ticket);
// Create the cookie.
HttpCookie authenticationCookie = new HttpCookie(FormsAuthentication.FormsCookieName, encryptedTicket); // Name of auth cookie (it's the name specified in web.config) // Hashed ticket
authenticationCookie.Expires = DateTime.Now.AddDays(365);
// Add the cookie to the list for outbound response
Response.Cookies.Add(authenticationCookie);
}
Action Résultat de Connexion Voir J'ai un problème quand je connecte et essayer ensuite d'accéder au cookie, mais il renvoie NULL parce que je lance « FormsAuthentication.SignOut(); »
public ActionResult Index(LogonDTO model, string message = null, string reason = null)
{
if (SessionModel.AgentMobilePhone != null) return RedirectToAction("Index", "Home");
if (reason != null) message = "Su sessión ha expirado. Vuelva a loguearse.";
ViewBag.Message = message;
if (Request.Cookies[FormsAuthentication.FormsCookieName] != null)
{
HttpCookie authCookie = Request.Cookies[FormsAuthentication.FormsCookieName];
FormsAuthenticationTicket authTicket = FormsAuthentication.Decrypt(authCookie.Value);
model.Username = authTicket.Name;
//model.Password = "in progress..."
}
return View(model);
}
Conformément à cet article: https://support.microsoft.com/en-us/help/910443/understanding-the-forms-authentication-ticket-and-cookie, 'FormsAuthentication.SignOut();' va supprimer le cookie dans tous les cas. Je suppose que dans le cas d'un cookie persistant, vous n'appelez pas du tout 'FormsAuthentication.SignOut();' – Patrick
donc, Dans mon cas devrais-je ne jamais nettoyer les cookies? – Necroimix
Je crois que le 'FormsAuthentication.SignOut();' devrait seulement être employé, si l'utilisateur a toujours un ticket/cookie mais il n'y a aucune session ouverte sur votre serveur. Cela supprimera le ticket du navigateur de l'utilisateur et le forcera à "se connecter" à nouveau. – Patrick