饼干.为什么这行不通呢?

本文关键字:行不通 为什么 饼干 | 更新日期: 2023-09-27 18:10:31

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

好的,所以如果我运行这个脚本只有Step1 -它将返回"NotNull" -好!

如果我只在步骤2中运行它,它将如预期的那样返回"Null"-很好!

但如果我然后删除步骤1和2(删除cookie与步骤2后)它会切换回"NotNull"——糟糕!

这怎么可能呢?如何检查cookie是否为Null ?

希望你能帮上忙:)

        //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);

饼干.为什么这行不通呢?

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

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

清除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) });