0

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); 
} 
+0

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

+0

donc, Dans mon cas devrais-je ne jamais nettoyer les cookies? – Necroimix

+0

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

Répondre

0

Vous pouvez utiliser javascript pour stocker des informations utilisateur s'il cliquez sur Remember Me case

utilisation

localStorage.setItem("UserName", "Smith"); 

pour définir les valeurs

et à la page de connexion sur le document événement prêt de Jquery écrire sous le code

var UserName = localStorage.getItem("UserName"); 
if (UserName) $("#username").val(UserName); 

Espérons que cela va résoudre votre problème.

+0

Dans le localstorage je ne peux pas enregistrer un mot de passe. – Necroimix

+0

Utilisez SessionID pour stocker le mot de passe côté serveur. Vous pouvez envoyer une demande avec SessionID au serveur qui récupérera les informations utilisateur stockées sur cet utilisateur et permettra à l'utilisateur de se connecter. –

+0

Le conserver dans une session n'est pas recommandé. Il doit nécessairement être dans un cookie car lors de la saisie de l'application aujourd'hui ou demain devrait mettre l'utilisateur et mot de passe dans les zones de texte si elle est cochée Se souvenir de moi. La session va mourir si j'ouvre l'application le jour suivant ou si je ferme l'application. – Necroimix