在页面加载的 asp.net Web 应用程序中,我获取当前页面 url 并将其存储在 session 变量中以跟踪用户所在的页面,以便他们在进入管理区域时可以返回到该页面,进行一些导航等。然后他们可以单击返回按钮,并会被带到他们在进入管理员之前所在的页面。
这一切都适用于 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 中, session 变量显示 404 页面链接,并在设置后显示正确的链接。我使用 fiddler 来查看发生了什么,Chrome 在 favicon.ico 文件的 GET header 中抛出 404,我没有在此 Web 应用程序中使用它。
我在 site.master 文件和 Chrome 和 FF 的头部添加了 faviocon 文件和链接,现在可以正常工作;我仍然不确定为什么会发生这种情况。任何人都知道我的 Session 变量为什么或如何被 Chrome 或 FF 覆盖?
作为旁注,我已经完成了调试过程,currentUrl 是正确的 url。
最佳答案
好吧,如果您使用 .NET 处理程序来为所有页面(即所有文件扩展名)提供服务,那么当您的浏览器向 favicon.ico 发出请求(谷歌以了解这是什么)时,服务器失败是有道理的找到它,然后重定向到 404。这又将 Session 变量修改为“最后提供的页面”:404。
现在,当您呈现管理页面,并在 session 中查询“最后提供的页面”时,您会得到什么? “404”。
我建议在将其存储在 session 中之前检查 URL 以查看它是否指向用户可导航的页面
if (IsAUserPage(currentUrl)
Session["navurl"] = currentUrl;
关于asp.net - session 变量被 Chrome 和 FF 击败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4903846/