相关疑难解决方法(0)

什么http状态代码应该用于告诉客户端会话超时?

在网页中,它使用YUI连接管理器/数据源向服务器发送AJAX请求,如果会话(包含用户是否已经过身份验证的信息)已经超时,那些只能通过身份验证查看的ajax响应用户应该返回一个http状态代码,告诉客户端会话已经超时,然后客户端只是将他重定向到登录页面或询问他是否要扩展会话.

我的问题是,在这种情况下,什么http状态代码最适合告诉客户端会话超时?

来自wiki的HTTP状态代码列表

php ajax yui http-status-codes

74
推荐指数
7
解决办法
5万
查看次数

处理ajax调用中的会话超时

我正在使用jquery对asp.net mvc控制器动作进行ajax调用:

[AcceptVerbs(HttpVerbs.Post)]
        public ActionResult GetWeek(string startDay)
        {
            var daysOfWeek = CompanyUtility.GetWeek(User.Company.Id, startDay);
            return Json(daysOfWeek);
        }
Run Code Online (Sandbox Code Playgroud)

当会话超时时,此调用将失败,因为User对象存储在会话中.我创建了一个自定义authorize属性,以检查会话是否丢失并重定向到登录页面.这适用于页面请求,但它不适用于ajax请求,因为您无法从ajax请求重定向:

[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method)]
    public class AuthorizeUserAttribute : AuthorizeAttribute
    {
        protected override bool AuthorizeCore(HttpContextBase httpContext)
        {
            if (!httpContext.Request.IsAjaxRequest())
            {//validate http request.
                if (!httpContext.Request.IsAuthenticated
                    || httpContext.Session["User"] == null)
                {
                    FormsAuthentication.SignOut();
                    httpContext.Response.Redirect("~/?returnurl=" + httpContext.Request.Url.ToString());
                    return false;
                }
            }
            return true;
        }
    }
Run Code Online (Sandbox Code Playgroud)

我在另一个线程上读到,当用户未经过身份验证并且你发出ajax请求时,你应该将状态代码设置为401(未授权),然后在js中检查它并将它们重定向到登录页面.但是,我不能让这个工作:

protected override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            if (Request.IsAjaxRequest() && (!Request.IsAuthenticated || User == null))
            {
                filterContext.RequestContext.HttpContext.Response.StatusCode = 401;
            }
            else
            {
                base.OnActionExecuting(filterContext);
            } …
Run Code Online (Sandbox Code Playgroud)

asp.net-mvc jquery authorize-attribute asp.net-mvc-3

56
推荐指数
4
解决办法
7万
查看次数