0

为了简单起见,我们有几个 aspx 页面...

Page1.aspx - 重置会话信息。
Page2.aspx - 带有结果的搜索表单并设置会话变量。
Page3.aspx、Page4.aspx、Page5.aspx - 需要在 Page2.aspx 上设置会话变量

我们发现,当 Page2.aspx 加载并设置 Session 变量时,Page1.aspx 被调用并重置 Session。但是,Page1.aspx 显示在浏览器中,而不是 Page2.aspx。当我们单步执行代码并在 Page1.aspx 和 Page2.aspx 的 Page_Load 事件中放置断点时,我们才能够发现这种情况发生,并且惊讶地看到 Page1.aspx 在 Page1.aspx 停止处理后立即处理 Page2.aspx服务器。

可能有用的信息...我们确实使用母版页,并且在母版页中有指向 Page1.aspx 的链接。除此之外,我在代码库中找不到任何对 Page1.aspx 的引用。

更新:
可能是由于身份验证?看来当我访问 Page2.aspx 时,服务器可能再次在 Page1.aspx 上进行身份验证?这是典型的吗?

4

2 回答 2

1

感谢安德鲁的提示。

我们弄清楚发生了什么……应用程序中的 Page1.aspx 实际上是 Default.aspx。在 Page2.aspx 上,另一个开发人员在没有定义 src 属性的页面上放置了一个 img 标记。因此,当 Page2.aspx 执行时,它正在寻找位于网站根级别的图像,然后触发 Default.aspx (Page1) 上的代码并擦除会话。

总的来说,它看起来像这样......

在 Page2.aspx 上

<img src=""> <!-- this ended up triggering a call to Default.aspx, wiping the session -->

希望这对其他人有所帮助。

于 2009-01-28T15:49:15.743 回答
0

启动 Fiddler 并正常运行应用程序。它会告诉您正在发生的流量并确定哪些页面正在重定向到其他页面。知道路径后,您可以通过调查源代码来确定该路径存在的原因。

您的应用程序域可能正在回收,因此所有会话变量都丢失了,如果会话变量丢失,您可能有代码重定向访问者,对吗?

如果是这种情况,作为快速修复,您可以使用 StateServer 或将会话变量存储在 Sql Server 中。您的应用程序域不应该每分钟都在回收,但如果您正在“进行中”存储会话(这是默认设置),它可能会导致您看到的行为。

于 2009-01-28T05:16:53.723 回答