在Web请求之间设置cookie不会持久存在
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在Web请求之间设置cookie不会持久存在相关的知识,希望对你有一定的参考价值。
我创建了一个全新的ASP.Net 4.6 MVC项目,并尝试在Requests Cookies集合中设置一个值,并在下一个请求中检索它。我正在使用cookies,因为Session
尚未在Application_BeginRequest
方法中使用。使用下面的代码,我要求的cookie值在我做的每个请求中都是null,尽管设置它。
public class MvcApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
}
protected void Application_BeginRequest()
{
var cookie = this.Request.Cookies.Get("Foo");
string value = cookie?.Value;
if (string.IsNullOrEmpty(value))
{
cookie = new HttpCookie("Foo", "Bar");
cookie.Expires = System.DateTime.UtcNow.AddHours(1);
this.Request.Cookies.Add(cookie);
}
}
protected void Application_EndRequest()
{
var cookie = this.Request.Cookies.Get("Foo");
string value = cookie?.Value;
}
}
我究竟做错了什么?我见过的关于cookies的所有帖子都显示以Request.Cookies.Get
/ Request.Cookies.Add
的方式设置/获取它们。
答案
你没有在这个代码中设置你只读它的cookie,我犯了同样的错误。用这个
this.Response.Cookies.Add(cookie);
代替
this.Request.Cookies.Add(cookie);
您现在应该在Google Chrome应用程序 - >您的网站的Cookie中看到它
另一答案
如果你想获得每个请求的状态,你必须在Application_AcquireRequestState
你的Application_AcquireRequestState
实现应该是:
protected void Application_AcquireRequestState(object sender, EventArgs e)
{
var cookie = this.Request.Cookies.Get("Foo");
string value = cookie?.Value;
if (string.IsNullOrEmpty(value))
{
cookie = new HttpCookie("Foo", "Bar");
cookie.Expires = System.DateTime.UtcNow.AddHours(1);
this.Request.Cookies.Add(cookie);
}
}
以上是关于在Web请求之间设置cookie不会持久存在的主要内容,如果未能解决你的问题,请参考以下文章