c# - 当身份验证票证/cookie 过期/超时时,在 IFRAMES 之外加载登录页面

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

我的 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/

相关文章:

c# - 以编程方式通过路由/模型绑定(bind)传递 URL

c# - 如何使用 LINQ 对序列中的相同值进行分组?

c# - 识别相同 OleDbException 类型的异常

c# - 如何在没有母版页的情况下在 asp.net 中打印页面并更改页面的配色方案?

asp.net - 如何在 ASP.Net 中将除单个 URL 之外的所有 URL 重定向到 https?

c# - 如果 IValidatableObject 不能用于执行对象的完整验证,那么 IValidatableObject 的 MVC 实现还有什么意义呢?

c# - System.Web.Mvc.HtmlHelper<ModelName> 不包含定义

c# - 当 DropdownStyle 为 DropDownList 时,如何更改 ComboBox 的背景颜色?

asp.net - SignalR 不支持 Windows 集成身份验证

asp.net-mvc - ASP.NET MVC - 数据库实体还是 View 模型?