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 が null または空の場合は、「ログインしてください」と表示します。

于 2013-11-13T09:00:12.597 に答える