在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不会持久存在的主要内容,如果未能解决你的问题,请参考以下文章

ASP MVC Cookie 不持久

PHP-会话技术

PHP-会话技术

Http协议中Cookie详细介绍

[Web][学习随笔]Session&cookie

[Web][学习随笔]Session&cookie