Asp.net MVC 、Extjs 解决Session过期跳到登录界面的问题

1、首先在LoginController里建一个退出方法如下:

        public ActionResult LoginOut()
        {
            return View();
        }

在Views里建一个视图LoginOut.cshtml:  添加如下js即可

<script type="text/javascript">
        window.top.location.href = "/Login/Index";

 </script>

2、再自定义一个过滤器,继承自AuthorizeAttribute

public class MyAuthorizationFilterAttribute : AuthorizeAttribute//,IActionFilter

{

   public override void OnAuthorization(AuthorizationContext filterContext)
        {

       if (filterContext.RouteData.Values["Controller"].ToString() == "Login")
              {
                //如果是登录页面,则什么都不做
              }

       else
              {
                  //非登录页面,则验证权限
                  if (filterContext.HttpContext.Session["userinfo"] == null)
                  {
                      if (!filterContext.HttpContext.Request.IsAjaxRequest())
                     {
                          filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary(new { Controller = "Login", Action = "LoginOut" }));
                      }
                      else
                      {
                          filterContext.HttpContext.Response.AddHeader("_timeout", "true");
                          filterContext.RequestContext.HttpContext.Response.End();
                      }
                  }
              }

    }

 }

3、在Scripts里面建一个timeout.js,内容如下:

Ext.Ajax.on('requestcomplete', function (conn, response, options) {
    if (response && response.getResponseHeader && response.getResponseHeader('_timeout')) {
        window.top.location.href = "/Login/Index";
    }
});

4、在_Layout.cshtml引用timeout.js即可。

5、将自定义的过滤器进行如下添加即可。

 

注:requestcomplete是Extjs中的Ajax的一个event,表示当一次请求成功完成时触发此事件

以上方法能解决Session过期跳到登录界面的问题,但感觉有点复杂。不知有木有啥简单的方法,求共享。

posted @ 2015-03-12 16:04  LEITION  阅读(497)  评论(0编辑  收藏  举报