【问题标题】:First-Party Cookies Not Found On Same Web Server在同一 Web 服务器上未找到第一方 Cookie
【发布时间】:2012-08-27 14:39:37
【问题描述】:

我在一台 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 可以正常工作。我做错了什么?

【问题讨论】:

    标签: c# asp.net windows cookies iis-7


    【解决方案1】:

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

    编辑

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

    【讨论】:

    • 即使 URL 是 www.server.com/Thisdirectory 而另一个 URL 是 www.server.com/Thatdirectory?
    • 为什么它对 385 个不同的测试用户有效,然后突然停止?
    • 不,这些 URL 位于同一个站点上,因此相同的 cookie 应该对两者可见。
    • 这就是问题所在,他们不是。他们是 385 名测试用户。现在它突然停止了。我不知道发生了什么。
    • 所以事实证明,虚拟目录中的 asp.net 应用程序甚至没有为自己生成 cookie。如果我尝试创建一个 cookie 并在该站点的同一页面上读取它,它仍然为空。其他肯定有问题,也许是 IIS,我不知道。
    【解决方案2】:

    尝试将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;
    }
    

    【讨论】:

    • 系统有缓存吗?关于 cookie 的组策略?另外,我会注意您放置代码以检查 cookie 值的方式和位置。请参阅我的答案中的更新以了解模式。
    • Cookie 在一个站点上运行良好,但在另一个站点上运行良好。不能是浏览器,因为它实际上在一个站点上工作。问题不再是一个虚拟目录中的一个站点看不到另一个站点创建的 cookie,现在的问题是一个站点甚至看不到自己创建的 cookie。别的东西是完全错误的。好像什么东西坏了。
    【解决方案3】:

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

    【讨论】:

    • 是的,这不是问题。问题是 cookie 不能跨虚拟目录使用。尽管他们能够以某种方式在短时间内为近 400 位用户带来神奇的效果。
    猜你喜欢
    • 1970-01-01
    • 2012-09-11
    • 1970-01-01
    • 1970-01-01
    • 2015-03-15
    • 1970-01-01
    • 2018-11-09
    • 1970-01-01
    • 2011-02-24
    相关资源
    最近更新 更多