如果会话超时,如何在 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 调用后重定向到新页面?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用JQuery和ColdFusion处理会话超时警告?