使用 ajax 时的会话过期
本文关键字:会话 过期 ajax 使用 | 更新日期: 2023-09-27 18:32:46
我有以下问题:当我的会话过期并且用户单击Ajax.Actionlink时,登录页面返回为部分页面
创建一个实现 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(); }
}