Asp.net MVC访问框架页中嵌套的iframe页面时,如果session或cookie过期,登录验证超时怎样自动跳转到登录页
一般登录验证的过滤器中,使用验证过滤器的Redirect方法,将请求重定向到指定的URL。但是如果我们要访问的页面是一个嵌套在框架页中的iframe页面时,这种重定向只会对iframe页面凑效,也就是会将iframe也重定向到登录页,这样就有违我们的目的了。所以我就尝试了很多方法来实现让整个页面重定向到登录页的目标,接下里我就来分享一下我的心路历程~~如果想看解决方法,可以直接拉到最后,忽略我的啰啰嗦嗦~~
首先,我尝试了替换掉Redirect,改用了Write方法,意在将指定字符串写入HTTP响应输出流,如下:
public class HandlerLoginAttribute : AuthorizeAttribute
{
public bool Ignore = true;
public HandlerLoginAttribute(bool ignore = true)
{
Ignore = ignore;
}
public override void OnAuthorization(AuthorizationContext filterContext)
{
if (Ignore == false)
{
return;
}
if (OperatorProvider.Provider.GetCurrent() == null)
{
WebHelper.WriteCookie("login_error", "overdue");
//将指定字符串写入HTTP响应输出流
filterContext.HttpContext.Response.Write("<script>top.location.href = '/Login/Index';</script>");
}
}
}
这里直接往输出流添加一段脚本——<script>top.location.href = "/Login/Index";</script>,把最顶层页面的链接替换成登录页的地址,这个方法我在本地验证是可以凑效的,可是把网站发布后部署到IIS上就无用了,问了我师父也是不明就里,他说这种输出流的响应不稳定,可能有的时候能识别到有的时候识别不到,我想反正这个方法也不凑效,那也没必要去深究了,哈哈 ,原谅我的咸鱼精神,如果有小伙伴知道为什么,欢迎分享呀。
总之,这个方法是pass掉了。
蓝后,我就又去求助师父了,师父说:可以通过过滤器返回一个标识,前端js获取标识之后跳转登录页。因为是在iframe子页面请求controller被拦截了,但是iframe框架页得不到被拦截的信息,在js中就可以通过父子页面通信处理这个问题了。
我仿佛明白了什么,但是潜意识觉得这个有点麻烦,然后师父又说了:你要是有时间的话,就把这个项目重构掉吧!
我。。。。。。。
我内心是拒绝的,发挥咸鱼精神,我锲而不舍的去搜索各种方法,不断尝试,终于发现了一个相当可行的方法,具体看代码:
划重点啦!!!
第一步,过滤器中依然使用Redirect方法进行重定向;
public class HandlerLoginAttribute : AuthorizeAttribute
{
public bool Ignore = true;
public HandlerLoginAttribute(bool ignore = true)
{
Ignore = ignore;
}
public override void OnAuthorization(AuthorizationContext filterContext)
{
if (Ignore == false)
{
return;
}
if (OperatorProvider.Provider.GetCurrent() == null)
{
WebHelper.WriteCookie("login_error", "overdue");//将请求重定向到指定的URL
filterContext.HttpContext.Response.Redirect("/Login/Index");
return;
}
}
}
第二步,在/Login/Index页面做限制,通过过滤器将iframe页面重定向到登录页面,然后在登录页脚本中判断当前页是不是顶层页,如果不是,则将当前iframe页面重定向为顶层页。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
</head>
<body>
<div class="wrapper">测试</div>
<script type="text/javascript">
$(function () {
if (window != top) {
top.location.href = location.href;
}
});
</script>
</body>
</html>
这种方法在本地运行时没有问题的,然后我也发布之后部署到了服务器的IIS上,也同样行得通,我的目的就此达成啦~~
撒花~~撒花~~
当然,作为一个小菜鸟,也是参考了很多别人的东西,这个方法也算是个笨方法吧,如果大家有更好的方法,也欢迎多多评论交流~~
感谢各位观看,献花~
/****************************我是可爱的分割线*********************************/

Asp.net MVC访问框架页中嵌套的iframe页面时,如果session或cookie过期,登录验证超时怎样自动跳转到登录页的更多相关文章
- ASP.NET MVC+EF框架+EasyUI实现权限管理系列(17)-注册用户功能的细节处理(各种验证)
原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(17)-注册用户功能的细节处理(各种验证) ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇) (1):框 ...
- php在没有登录的情况下自动跳转到登录页
<?php namespace Home\Controller; use Think\Controller; class BaseController extends Controller{ / ...
- ASP.NET MVC+EF框架+EasyUI实现权限管理系列(2)-数据库访问层的设计Demo
原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(2)-数据库访问层的设计Demo ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇) (1)框架搭建 前言:这 ...
- ASP.NET MVC+EF框架+EasyUI实现权限管理系列(23)-设置角色遗留问题和为权限设置角色以及EasyUI Tabs的使用
ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇) (1):框架搭建 (2):数据库访问层的设计Demo (3):面向接口编程 (4 ):业务逻辑层的封装 ...
- ASP.NET MVC+EF框架+EasyUI实现权限管理系列
http://www.cnblogs.com/hanyinglong/archive/2013/03/22/2976478.html ASP.NET MVC+EF框架+EasyUI实现权限管理系列之开 ...
- ASP.NET MVC+EF框架+EasyUI实现权限管理系列(20)-多条件模糊查询和回收站还原的实现
原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(20)-多条件模糊查询和回收站还原的实现 ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇) (1):框架 ...
- ASP.NET MVC+EF框架+EasyUI实现权限管理系列(14)-主框架搭建
原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(14)-主框架搭建 ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇) (1):框架搭建 (2 ...
- ASP.NET MVC+EF框架+EasyUI实现权限管理系列(11)-验证码实现和底层修改
原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(11)-验证码实现和底层修改 ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇) (1):框架搭建 ...
- ASP.NET MVC+EF框架+EasyUI实现权限管理系列(7)-DBSession的封装
原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(7)-DBSession的封装 ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇) (1):框架搭建 ...
随机推荐
- 内核调试-ftrace introduction
ftrace https://www.ibm.com/developerworks/cn/linux/l-cn-ftrace1/ https://www.ibm.com/developerworks/ ...
- swift 关键字willSet 和 didSet
// 下面是苹果给出的解释,就是在给属性设置新值的时候,可以在设置前和设置后做一些处理,这两个关键字就好像对该属性变化的监控 If you don’t need to compute the prop ...
- [nodejs]在mac环境下如何将node更新至最新?
在mac下安装angular-cli时,报出较多错误.初步怀疑是因为node环境版本过低导致. 在mac下,需要执行如下几步将node更新至最新版本,也可以更新到指定版本 1. sudo npm ca ...
- (C/C++学习)5.C++中的虚继承-虚函数-多态解析
说明:在C++学习的过程中,虚继承-虚函数经常是初学者容易产生误解的两个概念,它们与C++中多态形成的关系,也是很多初学者经常产生困惑的地方,这篇文章将依次分别对三者进行解析,并讲述其之间的联系与不同 ...
- JAVA学习总结-基础语法
/** * 这篇文章供自己学习JAVA总结回顾使用 * 主要借鉴了马士兵老师的视频进行总结 * @author Kingram */ 标识符的概念和命名规则 JAVA常量---不可变的变量 程序的执行 ...
- 初学者对ASCII编码、Unicode编码、UTF-8编码的理解
最早的计算机在设计时采用8个比特(bit)作为一个字节(byte),所以,一个字节能表示的最大的整数就是 255(二进制 11111111=十进制 255),如果要表示更大的整数,就必须用更多的字节. ...
- 00.continue break return的使用场景
continue continue 语句跳出本次循环,而break跳出整个循环. continue 语句用来告诉Python跳过当前循环的剩余语句,然后继续进行下一轮循环. continue语句用在w ...
- python文件头的含义
一.指定解释器及其路径 在Linux\Mac上,可以用./文件路径直接运行.py文件 这时,需要在python文件开头指定解释器及其路径 #!/usr/bin/python 这样系统就直接按pytho ...
- Python - 面对对象(基础)
目录 Python - 面对对象(基础) 一. 概述 二. 创建类和对象 三. 面向对象三大特征 封装 继承 多态 Python - 面对对象(基础) 一. 概述 面向过程:根据业务逻辑从上到下写垒代 ...
- .Net操作Excel —— NPOI
近期的两个项目都有关于NPOI的功能,经过了一点学习,自己也摸索了一会,感觉还有点意思.现在将部分代码分享一下.一部分是C#代码,一部分是VB.Net的,懒得修改了,基本上都是从项目文件中copy出来 ...