问题
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