在页面加载的我的asp.net Web应用程序中,我抓取当前页面的URL并将其存储在会话变量中以跟踪用户所在的页面,以便他们进入管理区域时可以返回它,进行一些导航然后他们可以点击返回按钮,然后在进入管理员之前进入他们所在的页面。
这一切都适用于IE8;但是在FF和Chrome中,当在管理员中时,返回链接会重定向到我为Web应用程序设置的自定义404页面。
出于测试目的,我在页面加载事件中添加了下面编写的代码:
Response.Write((string)Session["navurl"]);// displays "http://somedomain.com/customerror/default.aspx"
Session["navurl"] = currentUrl;//ex. currentUrl = "http://somedomain.com/contact/"
Response.Write((string)Session["navurl"]);//ex. currentUrl = "http://somedomain.com/contact/"
再次这在IE中没有问题,但在页面加载的FF和Chrome中,会话变量显示404页面链接,并在设置后显示正确的链接。我用fiddler看看发生了什么,Chrome在favicon.ico文件的GET标题中抛出404,我在这个网络应用程序中没有使用它。
我添加了faviocon文件和site.master文件头部的链接,Chrome和FF现在运行正常;我仍然不确定为什么会这样。任何人都知道我的Session变量被Chrome或FF覆盖的原因或方式是什么?
作为旁注,我已经通过流程调试步骤,currentUrl是正确的URL。
答案 0 :(得分:1)
好吧,如果您使用.NET处理程序来提供所有页面(即所有文件扩展名),那么当您的浏览器请求favicon.ico(谷歌了解这是什么)时,这是有道理的,服务器无法找到它,并重定向到404.这反过来将Session变量修改为“最后一页服务”:404。
现在,当您渲染管理页面并查询会话中的“最后一页服务”时,您会得到什么? “404”。
我建议在将URL存储到会话之前检查URL以查看它是否引用了用户可导航的页面
if (IsAUserPage(currentUrl)
Session["navurl"] = currentUrl;
答案 1 :(得分:0)
当您访问管理员时,您是否保留了会话?使用Fiddler你有没有看到你的页面的另一个请求?使用src =“”或iframes查找图像标记。
您必须在每个前端页面上设置Session var,但是,您永远不能在管理页面上设置它,只能构建“后退”链接。如果您正在使用Global.asax事件,请注意避免在提供管理页面时更改var。