mvc中ajax请求session超时处理
1、ajax请求没有权限获取session的状态,一般页面请求如果session超时,则自动跳转到登录页面。但是ajax则不能,
在这里我们使用前段ajax的complete方法进行判断session状态并跳转到登录页面;
使用ajaxSetup设置全局ajax的complete变量
$.ajaxSetup({
contentType: "application/x-www-form-urlencoded;charset=utf-8",
complete: function (XMLHttpRequest, textStatus) {
var sessionstatus = XMLHttpRequest.getResponseHeader("sessionstatus"); // 通过XMLHttpRequest取得响应头,sessionstatus,
if (sessionstatus == "timeout") {
// 如果超时就处理 ,指定要跳转的页面
window.location.href = "/Default/Login";
}
}
});
2、后台请求,在ajax请求后台方法前会先执行OnActionExecuting方法,所以我们在这个方法里面进行判断session是否超时,并且终止请求。需要注意:当filterContext.Result 不为空时,才能终止请求(详情查阅地址:http://www.cnblogs.com/luconsole/p/4346669.html);
//在OnActionExecuting进行判断session超时,并终止请求
protected override void OnActionExecuting(ActionExecutingContext filterContext)
{
//如果session里的userInfo为空,则代表session已经超时。
var user = System.Web.HttpContext.Current.Session["userInfo"] as LoginUser;
if (user == null || string.IsNullOrEmpty(user.ID))
{
if (filterContext.HttpContext.Request.IsAjaxRequest()) //判断是ajax请求
{
//这里设置session的超时状态
Response.Headers.Add("sessionstatus", "timeout");
//如果session超时了,终止请求。
filterContext.Result = Content("session timeout");
}
else
{
Response.Redirect(FormsAuthentication.LoginUrl);
}
}
else
{
//获取按钮列表
if (BtnElem != null)
{
foreach (var item in BtnElem)
{
ViewData[item["NAME"]] = item["ARRAY"];
}
}
if (!string.IsNullOrEmpty(Convert.ToString(Request.QueryString["MenuID"])))
{
GetUserElemAuth(Request.QueryString["MenuID"].ToString());
}
base.OnActionExecuting(filterContext);
}
}

浙公网安备 33010602011771号