Using Cookie in Asp.Net Mvc 4

杀马特。学长 韩版系。学妹 提交于 2019-11-26 12:24:40

问题


I have web application in Asp.Net MVC4 and I want to use cookie for user\'s login and logout. So my actions as follows:

Login Action

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

And I use this cookie in _Loyout as follow:

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

But When I click *UserOut* action this action happen first time, but then it doesn\'t work. I put breakpoint for looking process but it get UserLog action doesn\'t UserOut. My question is that where I use wrong way of cookie? What is a best way using cookie in Asp.Net Mvc4 for this scenario ?


回答1:


Try using Response.SetCookie(), because Response.Cookies.Add() can cause multiple cookies to be added, whereas SetCookie will update an existing cookie.




回答2:


We are using Response.SetCookie() for update the old one cookies and Response.Cookies.Add() are use to add the new cookies. Here below code CompanyId is update in old 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.



回答3:


userCookie.Expires.AddDays(365); 

This line of code doesn't do anything. It is the equivalent of:

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

You probably want

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


来源:https://stackoverflow.com/questions/19128507/using-cookie-in-asp-net-mvc-4

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!