使用 ajax 时的会话过期

本文关键字:会话 过期 ajax 使用 | 更新日期: 2023-09-27 18:32:46

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

使用 ajax 时的会话过期

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

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

您将在操作方法的顶部需要这样的东西

        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();   } 
    }