7

我工作的网站由几个项目(用多种语言编写)组成。现在我们必须在查询字符串和会话变量中使用一些笨拙的代码来让人们在从一个项目到另一个项目时保持登录状态。由于 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 入门,我们将不胜感激。

4

2 回答 2

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);
}
于 2012-09-04T19:14:29.323 回答
0

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

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

于 2012-09-04T19:06:23.750 回答