我正在开发一个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?
答案 0 :(得分:1)
发生这种情况是因为我在不同的虚拟目录下运行应用程序。当我在原版上运行它时,它起作用了。
答案 1 :(得分:0)
我建议加载IIS调试诊断工具。完全有可能在该特定服务器上存在资源问题或未处理的异常,该异常在将特定cookie添加到响应之后但在将其刷新到用户之前将其终止。这主要是由快速连续发生的一系列异常引起的,这些异常导致快速失败保护,以关闭运行页面的w3wp.exe进程。当进程被假脱机备份以提供响应时,cookie就会消失,所有结果都是渲染的html。
您也可以尝试关闭应用程序池中的快速失败保护或更改内存设置/回收设置。