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 });        
  • 相关阅读:
    source vimrc的时候报错:.vimrc:1: command not found: syntax
    python Qt5 实战(一)按钮颜色
    python做中学(二)bool()函数的用法
    python做中学(一)全局变量的用法
    音频算法speex中的aec分析以及解析
    ubuntu 18.04 安装mysql 遇到语言格式不兼容性问题解决
    ubuntu18.04 中个性化配置vim方法
    蓝牙协议栈中关于回连和断开的定义
    autojump--懒人利器
    终端中的 zsh 和 bash-魔法切换
  • 原文地址:https://www.cnblogs.com/GerryOfZhong/p/5254600.html
Copyright © 2011-2022 走看看