如果会话超时,如何在 MVC 中的 jquery ajax 调用后重定向到新页面?

Posted

技术标签:

【中文标题】如果会话超时,如何在 MVC 中的 jquery ajax 调用后重定向到新页面?【英文标题】:how to redirect to new page after jquery ajax call in MVC if session timeout? 【发布时间】:2011-07-03 10:38:44 【问题描述】:

1- 我有一个 Ajax 链接,它调用一个动作并且该动作返回一个视图,该视图在特定的 Div 中打开(将其视为使用相应视图更新 div 的菜单) 2-如果会话超时返回我的登录视图

所以如果我点击链接并且会话超时,登录视图会在 div 中打开,而不是在整个页面中

如果会话超时它在我的 div 的新页面中返回登录视图,我应该怎么做?

【问题讨论】:

【参考方案1】:

处理会话过期的一种有效方法是创建自定义授权属性,如果会话过期并正在处理 ajax 请求,则返回 HTTP 403 响应。

要创建一个 Ajax 感知授权属性,您可以从 AuthorizeAttribute 继承并覆盖 HandleUnauthorizedRequest 事件并检查请求类型,例如。 IsAjaxRequest()

public class AjaxAuthorizeAttribute : AuthorizeAttribute

    protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
    
        if (filterContext.HttpContext.Request.IsAjaxRequest())
        
            // Fire back an unauthorized response
            filterContext.HttpContext.Response.StatusCode = 403;
        
        else
            base.HandleUnauthorizedRequest(filterContext);
    

然后就像通常使用 Authorize 一样,使用 AjaxAuthorize 属性装饰您的控制器或操作

[AjaxAuthorize(Roles = "1,2,3,4,5")]
public class HomeController 

如果您使用 jQuery,您可以通过创建全局 ajax 错误处理程序来处理 403 响应。

    $.ajaxSetup(
        error: function (x, e) 
            if (x.status == 403) 
                alert("Sorry, your session has expired. Please login again to continue");
                window.location = "/login";
            
        
    );

【讨论】:

【参考方案2】:

您可以在 Global 的 Session_Start 事件中将用户重定向到登录页面

protected void Session_Start()
    
        GeneRateKey();
        if (Session["Username"] != null)
        
            //Redirect to Welcome Page if Session is not null  
            HttpContext.Current.Response.Redirect("~/WelcomeScreen", false);

        
        else
        
            //Redirect to Login Page if Session is null & Expires                   
            new RedirectToRouteResult(new RouteValueDictionary   "action", "Index" ,  "controller", "Login"  );
        
    

【讨论】:

以上是关于如果会话超时,如何在 MVC 中的 jquery ajax 调用后重定向到新页面?的主要内容,如果未能解决你的问题,请参考以下文章

Asp.Net MVC 2中会话超时时的确认

如何使用JQuery和ColdFusion处理会话超时警告?

在 Spring MVC 中设置会话超时

MVC 身份验证超时/会话 cookie 删除后的 Ajax 请求

JSP中的登录页面会话超时问题

如何使 ASP.NET MVC 登录用户超时?