当身份验证票证/ cookie过期/超时时,将登录页面加载到IFRAMES之外

时间:2013-07-09 16:54:19

标签: c# asp.net asp.net-mvc forms-authentication

我的ASP.NET MVC应用程序的母版页有两个IFRAME。

1)顶部的水平IFRAME显示应用程序徽标,退出链接等

2)顶栏下面的其余屏幕区域被第二个IFRAME占用,其中加载了所有视图。

身份验证超时后,ASP.NET会自动将用户重定向到登录页面。但是,由于视图在下面的IFRAME中运行,超时后,当ASP.NET将用户重定向到登录页面时,登录页面现在出现在下面的IFRAME中,顶部的IFRAME仍然显示用户仍然显示已登录。

我希望当用户被重定向到身份验证cookie超时的登录页面时,登录页面必须在浏览器的主窗口中显示没有任何IFRAME。

我该怎么做?

我怀疑我需要覆盖由Microsoft编写的负责此默认行为的一些HttpModule实现。是吗?

2 个答案:

答案 0 :(得分:2)

没有办法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

注意:您可以通过不使用IFRAM来避免这种情况。他们通常不赞成,您可以改为使用包含所有共享标头HTML的共享视图。

答案 1 :(得分:0)

我想我找到了我想要的东西。我认为我必须在HttpApplication课程中或通过HttpModule处理某些事件,我是对的。

请求在HttpApplication类'Authenticate事件中由ASP.NET验证。

如果我为此提供处理程序,我可以覆盖默认逻辑并执行我想要的任何操作。

就我而言,我会创建一个设置top.href = "~/Login/Index"的JavaScript。然后,我会将此脚本写入响应缓冲区,然后刷新缓冲区,以便不会在其上写入任何内容。