[转]菜鸟程序员的Asp.net MVC Session过期异常的拍卖

本文转自:http://www.cnblogs.com/JustRun1983/p/3377652.html

小赵是正毕业的电脑专业方面的大学生,4年之大学时里,他读了了很多编程方面的数码,也动手也了诸多代码。现在毕业了,他顺手的投入了T公司,开始了自己的程序员生涯。他信心满盈,相信自己4年的习到的东西,一定能在做事着上之所以会,帮助协调飞的尽职尽责现在底干活。

翻阅目录:

一致、Session引发的坏

次、使用MVC中的Filter来针对Session进行求证

其三、对于Ajax请求的中,Session失效的拍卖

季、处理Session过期异常的重中之重

无异于, 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可以接触这里)

图片 1😉

[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;
           }

      }
}

图片 2😉

其三,对于Ajax请求的吃,Session失效的处理

Ajax请求被,如果遇session过期,使用方面的计是匪克达到效果的。实现的笔触是,如果发现是Ajax请求,就回特定格式的Json数据,客户端对此数据开展处理,发现发Session失效的场面,就逾反至登录页面。

先是,扩展我们的MyAuthorizeAttribute

图片 3😉

[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;
      }
}

图片 4😉

面判断如果请是源于于Ajax, 就归一个Json
Result,客户端处理的代码如下:

图片 5😉

 $.ajax({
            type: "POST",
            url: "@Url.ContactInfoAjax()",
            success: function (msg) {
                      if (msg.Success) {
                              …….                 
                      }
                      if (msg.Redirect) {
                         window.location = msg.Redirect;
                      }
        }
});     

图片 6😉

季, 处理Session过期异常的重大

说实话,开发人员开始项目之时节,往往关注在代码实现之效力点,也便是先后”正常”工作时候的状态关注之再度多,而于”非正常”情况下,考虑的生少。而对此这些点的设想,才能够为我们成更正规化的程序员,摆脱菜鸟的地步。

如,您当读书这首博客让你有些收获,不妨点击一下右手下角的【推荐】;)按钮。
如果,您想更便于地觉察自己的新博客,不妨点击一下右手下角的【关注
Justrun
】;)。
因为,我之编著热情也相差不起头你的终将支持。

谢你的看,这里还有你可能感兴趣之文章引进博客文章。

图片 7

正文基于签约 2.5
中国陆地许可协议宣布,欢迎转载,演绎或用于商业目的,但是得保留本文的签署justrun(包含链接)。如你来任何疑窦还是授权点的情商,请被自身留言。

 

相关文章