web-dev-qa-db-fra.com

Utilisation de cookie dans Asp.Net Mvc 4

J'ai une application Web dans Asp.Net MVC4 et je souhaite utiliser cookie pour la connexion et la déconnexion de l'utilisateur. Donc, mes actions comme suit:

Action de connexion

    [HttpPost]
    public ActionResult Login(string username, string pass)
    {
        if (ModelState.IsValid)
        {
            var newUser = _userRepository.GetUserByNameAndPassword(username, pass);
            if (newUser != null)
            {
                var json = JsonConvert.SerializeObject(newUser);

                var userCookie = new HttpCookie("user", json);
                userCookie.Expires.AddDays(365);
                HttpContext.Response.Cookies.Add(userCookie);

                return RedirectToActionPermanent("Index");
            }
        }
        return View("UserLog");
    }

Action LogOut

    public ActionResult UserOut()
    {
        if (Request.Cookies["user"] != null)
        {
            var user = new HttpCookie("user")
                {
                    Expires = DateTime.Now.AddDays(-1),
                    Value = null
                };
            Response.Cookies.Add(user);
        }
        return RedirectToActionPermanent("UserLog");
    }

Et j'utilise ce cookie dans _Loyout comme suit:

@using EShop.Core
@using Newtonsoft.Json
@{
   var userInCookie = Request.Cookies["user"];
}
...
  @if (userInCookie != null && userInCookie.Value)
  {
        <li><a href="#">Salam</a></li>
        <li><a href="@Url.Action("UserOut", "Home")">Cıxış</a></li>
  }
  else
  {
        <li><a href="@Url.Action("UserLog", "Home")">Giriş</a></li>
  }

Mais lorsque je clique sur * Action UserOut *, cette action se produit une première fois, mais elle ne fonctionne pas. Je mets un point d'arrêt pour le processus de recherche mais il y a UserLog l'action ne UserOut . Ma question est celle où j'utilise le mauvais moyen de cookie? Quelle est la meilleure façon d’utiliser un cookie dans Asp.Net Mvc4 pour ce scénario?

47
Elvin Mammadov

Essayez d’utiliser Response.SetCookie(), car Response.Cookies.Add() peut entraîner l’ajout de plusieurs cookies, alors que SetCookie met à jour un cookie existant.

70
GvM

Nous utilisons Response.SetCookie () pour mettre à jour les anciens cookies et Response.Cookies.Add () permet d’ajouter les nouveaux cookies. Voici ci-dessous le code CompanyId est mis à jour dans l'ancien cookie [OldCookieName].

HttpCookie cookie = Request.Cookies["OldCookieName"];//Get the existing cookie by cookie name.
cookie.Values["CompanyID"] = Convert.ToString(CompanyId);
Response.SetCookie(cookie); //SetCookie() is used for update the cookie.
Response.Cookies.Add(cookie); //The Cookie.Add() used for Add the cookie.
14
Anil Singh
userCookie.Expires.AddDays(365); 

Cette ligne de code ne fait rien. C'est l'équivalent de:

DateTime temp = userCookie.Expires.AddDays(365); 
//do nothing with temp

Vous voulez probablement

userCookie.Expires = DateTime.Now.AddDays(365); 
2
Jonathan Allen