设置Cookie并不会在网络请求之间保持

时间:2017-03-05 01:14:37

标签: asp.net asp.net-mvc cookies

我创建了一个全新的ASP.Net 4.6 MVC项目,并尝试在Requests Cookies集合中设置一个值,并在下一个请求中检索它。我使用Cookie是因为SessionApplication_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;
    }
}

我做错了什么?我见过的与Cookie有关的所有帖子都显示以Request.Cookies.Get / Request.Cookies.Add的方式设置/获取它们。

2 个答案:

答案 0 :(得分:1)

如果您想为每个请求获取状态,则必须在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);
        }
    }

答案 1 :(得分:1)

您没有在此代码中设置cookie,而只是在读取它,我犯了同样的错误。使用这个

this.Response.Cookies.Add(cookie);

代替

this.Request.Cookies.Add(cookie);

您现在应该在Google chrome应用程序->您网站的Cookie中看到它