0

我在一台 Windows 2008 IIS 服务器上设置了两个站点。在第一个站点上,用户点击网页,然后使用以下简单的 C# 代码创建 cookie。

<%
    HttpCookie myCookie = new HttpCookie("MyTestCookie");
    myCookie.Value = "Hi";
    myCookie.Expires = DateTime.Now.AddMinutes(1);
    Response.Cookies.Add(myCookie);
>%

我已经验证该站点实际上可以“看到” cookie,并且我可以使用以下代码来显示其值:

<% Response.Write(Request.Cookies["MyTestCookie"].Value); %>

在托管在完全相同的服务器上的另一个站点上。我使用以下代码查看是否为 cookie 分配了值:

if (Request.Cookies["MyTestCookie"] == null)
{
    lblErr.Text = "Cookie is null.";
}
else
{
    lblErr.Text = Request.Cookies["MyTestCookie"].Value;
}

它是空的。然而,就在几天前,它不是空的。在实际站点的完整代码中,它对除少数用户外的所有用户都有效。在尝试对这些特定用户进行故障排除时,它停止了对所有人的工作。

我不知道我做错了什么,但我需要在两个完全独立且彼此不知道的站点之间传递值。我认为如果在同一台服务器上,第一方 cookie 可以正常工作。我究竟做错了什么?

4

3 回答 3

2

Cookie 与它们来自的 URL 相关联 - 浏览器不会向站点 B 发送从站点 A 接收到的 cookie(反之亦然)。

编辑

如果问题取决于用户,则可能与浏览器中的 cookie 设置有关 - 例如,如果某些用户阻止了 cookie。

于 2012-08-27T14:47:21.030 回答
1

尝试将Path属性设置为"/"并确保站点共享相同的域名。

如果它们位于不同的子域上,请将Domain属性设置为domainname.com(您的域名)。

编辑:

您的代码应如下所示:

if (Request.Cookies["MyTestCookie"] == null)
{
    HttpCookie myCookie = new HttpCookie("MyTestCookie");
    myCookie.Path = "/";
    myCookie.Domain = "domain.com";
    myCookie.Value = "Hi";
    myCookie.Expires = DateTime.Now.AddMinutes(1);
    Response.Cookies.Add(myCookie);

    lblErr.Text = "Cookie was null.";
}
else
{
    lblErr.Text = Request.Cookies["MyTestCookie"].Value;
}
于 2012-08-27T15:00:33.450 回答
0

您为 cookie 设置的到期时间(从现在起一分钟)有点太短了。尝试在未来将其设置为 6 个月,看看是否有帮助。

于 2012-08-27T20:24:21.293 回答