饼干。为什么不这样做?

时间:2011-10-06 17:24:37

标签: c# asp.net-mvc

我迷失了,现在最简单的事情对我不起作用。

好的,所以如果我只用Step1运行这个脚本 - 它会返回“NotNull” - 好!

如果我然后运行它只有步骤2它将按预期返回“空” - 好!

但是,如果我然后删除步骤1和2(用步骤2删除cookie后) 它切换回“NotNull” - Baad!

怎么会这样?如何检查cookie是否为空??

希望你能提供帮助:)

        //Step 1
        HttpContext.Response.Cookies.Add(new HttpCookie("test") { Name = "test", Expires = DateTime.Now.AddDays(2) });

        //Stem 2
        HttpContext.Request.Cookies["test"].Expires = DateTime.Now.AddDays(-2);
        HttpContext.Request.Cookies.Remove("test");
        HttpContext.Request.Cookies.Clear();


        string test = "Null";

        if (HttpContext.Request.Cookies["test"] != null)
        {
            test = "NotNull";
        }

        return Content(test);

2 个答案:

答案 0 :(得分:3)

在第二步中,您尝试修改Cookie但仍使用Request对象。要提交修改,您需要Response个对象。所以,在你的第二步饼干还活着之后。

    //Stem 2
    HttpContext.Response.Cookies["test"].Expires = DateTime.Now.AddDays(-2);
    HttpContext.Response.Cookies.Remove("test");
    HttpContext.Response.Cookies.Clear();

答案 1 :(得分:0)

清除RequestResponse中的Cookie不会从客户端删除Cookie。要真正删除cookie,您需要将cookie的过期时间设置为过去的日期,并将其重新添加到响应中,以便它在客户端上过期:

if (Request.Cookies["test"] != null)
{
    HttpCookie test = new HttpCookie("test");
    test.Expires = DateTime.Now.AddDays(-1d);
    Response.Cookies.Add(test);
}

或者,简单地说:

HttpContext.Response.Cookies.Add(new HttpCookie("test") { Name = "test", Expires = DateTime.Now.AddDays(-1d) });