检查用户是否在mvc4中首次打开站点或会话过期

时间:2013-11-13 08:10:23

标签: c# asp.net-mvc-4 session

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

 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" }));
        }
    }

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

问题:

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

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

如果情况不明确,请告诉我。

提前致谢。

1 个答案:

答案 0 :(得分:0)

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