Cookies在某些ASP.NET页面上为NULL(即使它在那里!)

时间:2010-01-20 14:51:39

标签: asp.net cookies

我正在开发一个ASP.NET应用程序,但我很难理解为什么cookie看起来是空的。

在一个页面上(results.aspx)我创建了一个cookie,每次用户点击一个复选框时都会添加条目。当用户单击按钮时,它们将被带到另一个页面(graph.aspx),在该页面中读取该cookie的内容。

问题是graph.aspx上似乎没有cookie。以下代码返回null:

Request.Cookies["MyCookie"];

奇怪的是,这只是我们的登台服务器上的一个问题。这个应用程序部署到生产服务器,没关系。它也在当地完美运作。

我在两个页面都放了调试代码:

StringBuilder sb = new StringBuilder();
foreach (string cookie in Request.Cookies.AllKeys)
{
    sb.Append(cookie.ToString() + "<br />");
}

this.divDebugOutput.InnerHtml = sb.ToString();

在results.aspx(没有问题的地方),我可以看到cookies是:

  

的myCookie   __utma   __utmb   __utmz   _csoot   _csuid ASP.NET_SessionId   __utmc

在graph.aspx上,你可以看到没有'MyCookie'

  

__ UTMA   __utmb   __utmz   _csoot   _csuid ASP.NET_SessionId   __utmc

话虽如此,如果我看看我的FireCookie,我可以看到同样的cookie确实存在于两个页面上! WTF?!?!?!?! (好吧,咆哮:-))

有没有人见过这样的东西?为什么ASP.NET声称cookie在一个页面上为null,而在另一个页面上不为null?

2 个答案:

答案 0 :(得分:1)

发生这种情况是因为我在不同的虚拟目录下运行应用程序。当我在原版上运行它时,它起作用了。

答案 1 :(得分:0)

我建议加载IIS调试诊断工具。完全有可能在该特定服务器上存在资源问题或未处理的异常,该异常在将特定cookie添加到响应之后但在将其刷新到用户之前将其终止。这主要是由快速连续发生的一系列异常引起的,这些异常导致快速失败保护,以关闭运行页面的w3wp.exe进程。当进程被假脱机备份以提供响应时,cookie就会消失,所有结果都是渲染的html。

您也可以尝试关闭应用程序池中的快速失败保护或更改内存设置/回收设置。