Asp.net MVC Session过期异常的处理
来源:互联网 发布:淘宝女包手提包 编辑:程序博客网 时间:2024/05/17 05:01
一, Session引发的异常
小赵刚进公司,就参与到了一个实际的项目中了,项目使用的是Asp.net MVC。花了大概2个周的时间,小赵就完成了所有功能,提交给QA测试了。
过了一天,QA发回了测试结果,小赵过了一遍,发现原来自己做的东西,里面问题这么多。
其中一个bug是这样的 :
使用Firefox登录进入系统后,再打开一个Tab,进入系统页面,点击logout. 在回到前一个tab页面,点击Save按钮,出现了js错误。这个时候应当将用户转到登陆页。
小赵看到这个bug,有些目瞪口呆,没想到QA用这么"暴力"的方式来测试自己的程序。在另一个Tab上点击logout, 会导致session清空的,这样再点击第一个tab上的Save按钮,调用的Ajax方法会出现异常的。
但是如何处理这种”非正常”操作引发的异常呢?
二,使用MVC中的Filter来对Session进行验证
小赵查了查资料,发现MVC中的 AuthorizationFilter 能够在实际访问Controller前,拦截请求,这个时候在这里可以对Session的有效性进行检查,如果发现Session失效了,就把用户转向登陆页。(关于MVC filter可以点这里)
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = true, Inherited = true)]public class MyAuthorizeAttribute : FilterAttribute, IAuthorizationFilter{ public void OnAuthorization(AuthorizationContext filterContext) { var loginUser = filterContext.HttpContext.Session["User"]; //When user has not login yet if (loginUser == null) { var redirectUrl = ConstantProvider.LoginURL + "?RedirectPath=" + filterContext.HttpContext.Request.Url; filterContext.Result = new RedirectResult(redirectUrl); return; } }}
三,对于Ajax请求的中,Session失效的处理
Ajax请求中,如果遇到session过期,使用上面的方法是不能够达到效果的。实现的思路是,如果发现是Ajax请求,就返回 特定格式的Json数据 ,客户端对于这个数据进行处理,发现有Session失效的情况,就跳转到登录页面。
首先,扩展我们的MyAuthorizeAttribute
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = true, Inherited = true)]public class MyAuthorizeAttribute : FilterAttribute, IAuthorizationFilter{ public void OnAuthorization(AuthorizationContext filterContext) { var loginUser = filterContext.HttpContext.Session["User"]; //When user has not login yet if (loginUser == null) { var redirectUrl = ConstantProvider.LoginURL + "?RedirectPath=" + filterContext.HttpContext.Request.Url; if(!filterContext.HttpContext.Request.IsAjaxRequest()) { filterContext.Result = new RedirectResult(redirectUrl); } else { filterContext.Result = new JsonResult { Data = new { Success = false, Message = string.Empty, Redirect = redirectUrl } }; } return; }}
上面判断如果请求是来自于Ajax, 就返回一个Json Result,客户端处理的代码如下:
$.ajax({ type: "POST", url: "@Url.ContactInfoAjax()", success: function (msg) { if (msg.Success) { ……. } if (msg.Redirect) { window.location = msg.Redirect; } }});
0 0
- Asp.net MVC Session过期异常的处理
- Asp.net的Session过期
- ASP.NET处理Session过期的几种方案
- Asp.net Session过期页面处理
- asp.net mvc 的异常处理解决方案
- asp.net mvc 的异常处理解决方案
- ASP.NET mvc异常处理的方法
- DWR的异常处理及session过期
- DWR的异常处理及session过期
- ASP.NET MVC 异常处理
- Asp.net的Session过期问题
- Asp.net的Session过期(转载)
- MVC过滤器处理Session过期
- asp.net mvc异常处理的不同方法c
- ASP.NET mvc异常处理的方法有哪些
- ASP.NET MVC下基于异常处理的完整解决方案
- asp.net判断session过期
- 对ASP.net过期页的处理
- 机器学习路线图(附资料)
- 深入理解Java Annotation
- windows申请免费SSL证书-Let's Encrypt
- 16-3-3代码
- Objective-c中关于UI主线程与正向传值冲突的解决办法
- Asp.net MVC Session过期异常的处理
- 如何更好的判断系统上传文件是指定文件类型--文件魔术数字
- Kerberos认证流程详解
- 开学了
- 用GPUImage做自己的滤镜
- Objective-C 属性特性(assign , retain , copy , readonly , readwrite , atomic , nonatomic)专业App,微信,网站开发 麻城
- oracle-存储函数
- servlet与jsp的生命周期
- Apache Thrift - 可伸缩的跨语言服务开发框架