web-dev-qa-db-ja.com

Asp.Net Mvc 4でのCookieの使用

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

ログアウトアクション

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

そして、私はこのCookieを_Loyoutで次のように使用します。

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

しかし、私click* UserOut *アクションの場合、このアクションは最初に発生しますが、その後は動作しません。プロセスを探すためにブレークポイントを置きましたが、それはgetUserLogアクションが(UserOut。私の質問は、間違った方法でクッキーを使用するということですか?このシナリオでAsp.Net Mvc4でCookieを使用する最良の方法は何ですか?

47
Elvin Mammadov

Response.SetCookie()を使用してみてください。Response.Cookies.Add()は複数のCookieを追加する可能性がありますが、SetCookieは既存のCookieを更新します。

70
GvM

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.
14
Anil Singh
userCookie.Expires.AddDays(365); 

このコード行は何もしません。以下と同等です。

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

あなたはおそらく欲しい

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