Asp.net MVC Session过期异常的处理

对于用户登录后将数据存储到session中,但是对于session过期引发的异常,会导致很多程序崩溃,或数据不对。所以正对于session过期处理,势在必行。

1.在一些数据持久化的操作中,我们会使用一些session中的数据,向后台进行数据持久化,但是如果session中没有数据的话,会出现很多意想不到的错误。(一般的session过期)
  使用MVC中的Filter来对Session进行验证:MVC中的 AuthorizationFilter 能够在实际访问Controller前,拦截请求,这个时候在这里可以对Session的有效性进行检查,如果发现Session失效了,就把用户转向登陆页
  代码如下:
  

 1 public class MyAuthorizeAttribute : FilterAttribute, IAuthorizationFilter
 2 {
 3   public void OnAuthorization(AuthorizationContext filterContext)
 4   {
 5     var loginUser = filterContext.HttpContext.Session["User"];
 6     //当session过期的时候,进行跳转
 7     if (loginUser == null)
 8     {
 9       var redirectUrl = ""; //跳转的地址10       filterContext.Result = new RedirectResult(redirectUrl);
11       return;
12     }
13   }
15 }

2.对于Ajax请求的中,Session失效的处理:如果发现是Ajax请求,就返回 特定格式的Json数据 ,客户端对于这个数据进行处理,发现有Session失效的情况,就跳转到登录页面。
代码如下:

 1 public class MyAuthorizeAttribute : FilterAttribute, IAuthorizationFilter
 2 {
 3   public void OnAuthorization(AuthorizationContext filterContext)
 4   {
 5     var loginUser = filterContext.HttpContext.Session["User"];
 6     //When user has not login yet
 7     if (loginUser == null)
 8     {
 9       var redirectUrl = ""; //跳转的地址
10       if(!filterContext.HttpContext.Request.IsAjaxRequest())
11       {
12         filterContext.Result = new RedirectResult(redirectUrl);
13       }
14       else
15       {
16         filterContext.Result = new JsonResult
17       {
18         Data = new
19         {
20           Success = false,
21           Message = string.Empty,
22           Redirect = redirectUrl
23         }
24       };
25     }
26     return;
27   }
28 }

客户端的js代码如下:

 1 $.ajax({
 2     type: "POST",
 3     url: "url",
 4     success: function (msg) {
 5         if (msg.Success) {
 6             ……. 
 7         }
 8         if (msg.Redirect) {
 9             window.location = msg.Redirect;
10         }
11     }
12 });        
原文地址:https://www.cnblogs.com/GerryOfZhong/p/5254600.html