0

如果会话过期,我正在使用以下代码重定向到登录页面:

 public override void OnActionExecuting(System.Web.Mvc.ActionExecutingContext filterContext)
    {
        if (HttpContext.Current.Session.Count == 0 || HttpContext.Current.Session["UserRole"] == null)
        {
            filterContext.Controller.TempData["Error"] = "Your Session have expired. Please relogin again.";
            if (filterContext.RequestContext.HttpContext.Request.IsAjaxRequest())
            {
                //filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary(new { action = "Index_Partial", controller = "Home" }));
                filterContext.Result = new JsonResult
                {
                    JsonRequestBehavior = JsonRequestBehavior.AllowGet,
                    Data = new
                    {
                        error = true,
                        message = "Your Session have expired. Please relogin again."
                    }
                };
                filterContext.HttpContext.Response.Clear();
                filterContext.HttpContext.Response.StatusCode = 501;
                filterContext.HttpContext.Response.TrySkipIisCustomErrors = true;
            }
            else
                filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary(new { action = "Index", controller = "Home" }));
        }
    }

使用上面的代码一切正常。

问题 :

用户打开站点我显示欢迎消息,然后如果用户单击站点树视图中的任何项目,因为所有项目仅适用于经过身份验证的用户,则消息应为“请登录”,因为用户之前没有任何活动会话但是通过检查上面代码中的会话,我只能显示一条消息。

“您的会话已过期。请重新登录。”

如果仍然不清楚,请告诉我。

提前致谢。

4

1 回答 1

0

您应该使用 cookie 来保存用户登录信息,使用 Session 检查当前用户是否应该再次登录。如果 cookie 为空或为空,则显示“请登录”。

于 2013-11-13T09:00:12.597 回答