セッションの有効期限が切れた場合、次のコードを使用してログイン ページにリダイレクトしています。
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" }));
}
}
上記のコードを使用すると、すべて正常に動作します。
問題 :
ユーザーがウェルカム メッセージを表示しているサイトを開き、ユーザーがサイトのツリー ビューで任意のアイテムをクリックすると、すべてのアイテムは認証されたユーザーのみが利用できるため、ユーザーは以前にアクティブなセッションを持っていなかったため、メッセージは「ログインしてください」である必要があります。しかし、上記のコードのようにセッションをチェックすることで、単一のメッセージしか表示できません。
「セッションの有効期限が切れました。もう一度ログインしてください。」
まだシナリオが明確でない場合はお知らせください。
前もって感謝します。