为了简单起见,我们有一些aspx页面......
Page1.aspx - 重置会话信息 Page2.aspx - 搜索结果表格并设置会话变量 Page3.aspx,Page4.aspx,Page5.aspx - 需要在Page2.aspx上设置会话变量
我们发现,当Page2.aspx加载并设置Session变量时,会调用Page1.aspx并重置Session。但是,Page1.aspx显示在浏览器中,而不是Page2.aspx。当我们逐步完成代码并在Page1.opx和Page2.aspx的Page_Load事件中放置断点时,我们才发现这种情况发生了,并且惊讶地看到Page1.aspx在Page1.aspx停止处理后立即处理。服务器
可能有用的信息......我们使用母版页,并且在母版页中有指向Page1.aspx的链接。除此之外,我在代码库中找不到对Page1.aspx的任何引用。
更新:
可能是由于身份验证?看来当我访问Page2.aspx时,服务器可能会再次在Page1.aspx上进行身份验证?这是典型的吗?
答案 0 :(得分: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 -->
希望能帮助别人。
答案 1 :(得分:0)
启动Fiddler并正常运行该应用程序。它将告诉您正在发生的流量并确定哪些页面重定向到其他页面。一旦知道了路径,就可以通过调查源代码来确定该路径存在的原因。
您的应用程序域可能是回收的,因此,所有会话变量都会丢失,如果会话变量丢失,您可能会有代码重定向访问者,对吗?
如果是这种情况,作为快速修复,您可以使用StateServer或在Sql Server中存储会话变量。您的应用程序域不应该每分钟都在回收,但如果您正在“处理中”存储会话,则可能会导致您看到的行为,这是默认情况。