Ajax[转]菜鸟程序员之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能够点这里)

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

      }
}

Ajax 2😉

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

Ajax请求中,若是赶上session过期,使用方面的不二法门是不能达标效果的。完成的笔触是,如若发现是Ajax请求,就再次来到特定格式的Json数据,客户端对于那么些数据开展处理,发现有Session失效的状态,就跳转到登录页面。

先是,增添大家的MyAuthorizeAttribute

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

Ajax 4😉

地点判断假诺请求是源于于Ajax, 就赶回一个Json
Result,客户端处理的代码如下:

Ajax 5😉

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

Ajax 6😉

四, 处理Session过期极度的基本点

说实话,开发人士开首项目标时候,往往关怀在代码达成的作用方面,也就是程序”正常”工作时候的场所关切的越来越多,而对此”非正常”意况下,考虑的很少。而对此那个地点的考虑,才能让大家成为尤其规范的程序员,摆脱菜鸟的景况。

万一,您认为读书那篇博客让你有些收获,不妨点击一下右下角的推荐;)按钮。
借使,您希望更易于地发现我的新博客,不妨点击一下右下角的关注
Justrun
;)。
因为,我的小说热情也离不开您的自然协助。

感谢您的阅读,这里还有你也许感兴趣的篇章推介博客文章

Ajax 7

本文基于签署 2.5
中国大洲
许可协议揭橥,欢迎转发,演绎或用来生意目标,不过必须保留本文的签署justrun(包含链接)。如您有其余疑窦依然授权方面的协商,请给自己留言

 

相关文章