在Asp.Net Mvc 4中使用Cookie

问题描述 投票:47回答:3

我在Asp.Net MVC4中有Web应用程序,我想使用cookie进行用户登录和注销。所以我的行动如下:

登录操作

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

LogOut Action

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

我在_Loyout中使用此cookie如下:

@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>
  }

但是当我点击* UserOut *动作时,这个动作第一次发生,但是它不起作用。我把断点用于查找进程,但它得到的UserLog操作不是UserOut。我的问题是我在哪里使用错误的cookie方式?在这种情况下,在Asp.Net Mvc4中使用cookie的最佳方法是什么?

c# asp.net-mvc-4 cookies action httpcookie
3个回答
70
投票

尝试使用Response.SetCookie(),因为Response.Cookies.Add()可以导致添加多个cookie,而SetCookie将更新现有的cookie。


14
投票

我们使用Response.SetCookie()来更新旧的cookie,并使用Response.Cookies.Add()来添加新的cookie。下面的代码CompanyId在旧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.

2
投票
userCookie.Expires.AddDays(365); 

这行代码没有做任何事情。它相当于:

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

你可能想要

userCookie.Expires = DateTime.Now.AddDays(365); 
© www.soinside.com 2019 - 2024. All rights reserved.