【问题标题】:How do Cookies Work in ASP.NET?Cookie 在 ASP.NET 中如何工作?
【发布时间】:2012-09-04 18:57:52
【问题描述】:

我工作的网站由多个项目组成(以多种语言编写)。现在我们必须在查询字符串和会话变量中使用一些笨拙的代码来让人们在从一个项目到另一个项目时保持登录状态。由于 cookie 是特定于域的,我们正在尝试将其转换为它们,因为它们可以使用一种语言在一个项目中设置,但可以由使用不同语言的不同项目(在同一域上)访问。

但是,我在更改 cookie 的值和删除它们时遇到了问题。或者更具体地说,我无法对 cookie 棒进行任何更改。

例如在我的注销代码中:

if (Request.Cookies["thisuserlogin"] != null)
{
    HttpCookie myCookie = new HttpCookie("thisuserlogin");
    myCookie.Value = String.Empty;
    myCookie.Expires = DateTime.Now.AddDays(-1d);
    Response.Cookies.Add(myCookie);
    Response.Cookies.Set(myCookie);
    litTest.Text = myCookie.Expires.ToString() + "<br />" + Request.Cookies["thisuserlogin"].Expires.ToString();
}

最后一行是昨天,下一行是 1/1/0001 12:00:00,即使它们应该是同一个 cookie。那么为什么即使设置了cookie,它的值也没有改变呢?有没有办法强制用户的计算机更新 cookie 的值,包括删除?

非常感谢。 PS 您可以提供任何 URL 以提供易于理解的 cookie 入门,我们将不胜感激。

【问题讨论】:

  • 我编辑了标题,因为 cookie 不是 C# 特定的。 ASP.NET 更合适。

标签: c# asp.net cookies


【解决方案1】:

http://msdn.microsoft.com/en-us/library/ms178194(v=vs.100).aspx

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

    // Update Client
    Response.Redirect(Request.RawUrl);
}

【讨论】:

  • 我无法删除域中的所有 cookie。我需要删除特定的 cookie 并让它们保持删除状态,如我的示例中所述,这不会发生。
【解决方案2】:

您应该在客户端使用Fiddler 之类的工具来捕获所有来回传输的数据。这将帮助您了解您的 cookie 应该设置为过去的日期(并且在下一个请求中也会丢失)。

至于您的文本框输出,您列出了您创建的 cookie 过期时间和 request cookie 的过期时间,后者没有。如果您改为查看响应 cookie,您应该会看到正在设置的日期。此外,无需调用Response.Cookies.SetResponse.Cookies.Add 应该是你所需要的。

【讨论】:

  • Fiddler 是一个很棒的武器库工具
  • 我不明白。因为我使用的是 Add 命令,所以输出中的两个 cookie 不应该是同一个 cookie,都具有特定的到期日期吗?如果 Set 命令是不必要的,那它为什么存在呢?
  • 设置是为了在将代码从 ASP 移动到 ASP.Net(实际上是 VB.Net)时保持兼容性,就像 Response.End 一样(不正确,请参阅下一条评论)。至于他们为什么不改变,这样看。您的请求 cookie 中有一个 cookie(来自客户端)。您创建一个具有相同名称的全新 cookie 并将其放置在响应 cookie 中(将发送到客户端)。此时,虽然同名,但它们是两个完全不同的cookie,指向不同的对象。
  • 为了澄清 .Add(HttpCookie).Set(HttpCookie) 方法,Add 将向集合中添加一个新的 cookie 并允许重复。如果它不存在,Set 会将它添加到集合中,但如果它存在,它将更新 cookie。 Set 不允许重复。见HttpCookieCollection.SetHttpCookieCollection.Add
猜你喜欢
  • 2014-12-07
  • 1970-01-01
  • 1970-01-01
  • 2013-01-03
  • 2011-11-10
  • 1970-01-01
  • 2016-04-12
  • 2022-01-14
  • 2015-05-24
相关资源
最近更新 更多