我的 ASP.NET MVC 应用程序的母版页有两个 IFRAME。
1) 顶部的水平 IFRAME,显示应用程序 Logo 、注销链接等。
2) 顶部栏下方的其余屏幕区域由第二个 IFRAME 占据,所有 View 均在其中加载。
身份验证超时后,ASP.NET 自动将用户重定向到登录页面。但是,由于 View 在下面的 IFRAME 中运行,因此超时后,当 ASP.NET 将用户重定向到登录页面时,登录页面现在出现在下面的 IFRAME 中,而顶部 IFRAME 仍然出现,表明用户处于静止状态已登录。
我希望当用户因身份验证 cookie 超时而重定向到登录页面时,登录页面必须出现在浏览器主窗口中,且没有任何 IFRAME。
我该怎么做?
我怀疑我需要重写一些由 Microsoft 编写的 HttpModule 实现,该实现负责此默认行为。是这样吗?
最佳答案
没有办法让Redirect
指示浏览器重定向到新页面。重定向始终发生在 iframe
内。
您可以更改“超时”页面:
<configuration>
<system.web>
<authentication mode="Forms">
<forms loginUrl="~/Account/Timeout" timeout="1" />
</authentication>
</system.web>
</configuration>
然后在超时页面中,您将需要有一个如下链接:
<a href="" onclick="window.top.location.href='/Account/LogOn'">Login Again</a>
引用文献:
Redirect the parent page from IFrame
How to redirect to logon page when session State time out is completed in asp.net mvc
注意:您可以通过不使用 IFRAMES 来避免这种情况。它们通常不受欢迎,您可以使用包含所有共享 header HTML 的共享 View 。
关于c# - 当身份验证票证/cookie 过期/超时时,在 IFRAMES 之外加载登录页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17553901/