Usando Cookie en Asp.Net Mvc 4

Tengo una aplicación web en Asp.Net MVC4 y quiero usar cookies para el inicio de sesión y el cierre de sesión del usuario. Entonces mis acciones son las siguientes:

Iniciar sesión

[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"); } 

Acción de 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"); } 

Y uso esta cookie en _Loyout de la siguiente manera:

 @using EShop.Core @using Newtonsoft.Json @{ var userInCookie = Request.Cookies["user"]; } ... @if (userInCookie != null && userInCookie.Value) { 
  • Salam
  • Cıxış
  • } else {
  • Giriş
  • }

    Pero cuando hago clic en la acción * UserOut *, esta acción ocurre por primera vez, pero luego no funciona. Puse breakpoint para buscar el proceso pero obtiene la acción UserLog no UserOut . Mi pregunta es: ¿dónde uso la forma incorrecta de cookie? ¿Cuál es la mejor forma de usar cookies en Asp.Net Mvc4 para este escenario?

    Intente utilizar Response.SetCookie() , porque Response.Cookies.Add() puede hacer que se agreguen varias cookies, mientras que SetCookie actualizará una cookie existente.

    Estamos utilizando Response.SetCookie () para actualizar las cookies antiguas y Response.Cookies.Add () para agregar las nuevas cookies. A continuación, el código CompanyId se actualiza en la cookie antigua [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. 
     userCookie.Expires.AddDays(365); 

    Esta línea de código no hace nada. Es el equivalente de:

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

    Probablemente quieras

     userCookie.Expires = DateTime.Now.AddDays(365);