使用ajax时会话到期

时间:2012-04-30 08:33:40

标签: c# ajax asp.net-mvc

我遇到以下问题:当我的会话过期并且用户点击Ajax.Actionlink时,登录页面返回为部分页面

2 个答案:

答案 0 :(得分:2)

创建一个实现IAuthorizationFilter的ActionFilterAttribute 并在OnAuthorization中检查用户是否已注销,
如果他已注销并且这是一个Ajax请求(filterContext.HttpContext.Request.IsAjaxRequest()) - 将filterContext.Result设置为不同的结果。 我用HttpStatusCode.Unauthorized返回一个结果 所以我可以在客户端挂钩并做出相应的反应

从未使用Ajax.Actionlink,我使用jQuery进行所有Ajax调用,并使用全局钩子来捕获错误状态代码的结果

答案 1 :(得分:1)

你的动作方法

最需要这样的东西
        if (Session["UserID"] == null && Request.IsAjaxRequest())
        {
                return Content("<div class=\"error\">Your session was expired. Press Logout and then login again to continue</div>");
        }

<强>更新 (您需要在检查授权时指定它,无论您创建什么机制)

    public ActionResult Index()
    {
        try
        {
            List<string> rights = objAuthorization.CheckMemberRightsOnPage("page1");
            if (!rights.Contains("View"))
            {
                if (Session["UserID"] == null && Request.IsAjaxRequest())
                {
                    return Content("<div class=\"error\">Your session was expired. Press Logout and then login again to continue</div>");
                }
                return RedirectToAction("Restricted", "UserLogin", new { url = HttpUtility.HtmlEncode(Request.Url.AbsolutePath.Substring(1)) });
            }
            ViewData["objAuthorization1"] = rights;


        //  your other things here
        }
        catch(Exception ex){
           ViewData["ErrorMessage"] = "An error occurred: " + ex.Message;
            return View();   } 

    }