zoukankan      html  css  js  c++  java
  • 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 });        
  • 相关阅读:
    Linux系统调优方法
    递归(Recursion)算法
    数据结构之链表
    【日常摸鱼】牛客挑战赛2
    【日常摸鱼】牛客挑战赛1
    组合计数学习笔记1
    To-Do List 2
    20199112 2019-2020-2 《网络攻防实践》第 3 周作业
    Flutter上线项目实战——腾讯点播直播下载
    打开旧Flutter项目说:Your Flutter application is created using an older version of the Android embedding
  • 原文地址:https://www.cnblogs.com/GerryOfZhong/p/5254600.html
Copyright © 2011-2022 走看看