私は現在、私たちのサイトでセッションタイムアウトを処理するためのアクションフィルターを追加しています:
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, Inherited = true, AllowMultiple = false)]
public class SsoExpireFilterAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
if(!(filterContext.Controller.GetType() == typeof(HomeController)
&& filterContext.ActionDescriptor.ActionName == MVC.Home.ActionNames.Index))
{
if(filterContext.ActionDescriptor.ActionName != MVC.Home.ActionNames.TimeoutRedirect.ToLower())
{
if (!Thread.CurrentPrincipal.Identity.IsAuthenticated)
{
if (filterContext.HttpContext.Request.IsAjaxRequest())
filterContext.Result = new JsonResult { Data = "_Logon_" };
else
filterContext.Result = new RedirectToRouteResult(
new RouteValueDictionary
{
{"Controller", "Home"},
{"Action", "TimeoutRedirect"}
});
}
}
}
base.OnActionExecuting(filterContext);
}
}
Principal.IdentityのIsAuthenticatedフラグは、タイムアウト後にfalseになると予想していますが、アクションフィルターでヒットした場合はtrueのままです。(Global.asaxのSession_Endにブレークポイントを設定したため、セッションがタイムアウトしたことはわかっています。これが最初にヒットします)。
私たちのサイトの認証は、会社の標準の「シングルサインオン」dllによって処理されるので、これは別の認証タイムアウトを設定していると思いますが、これは可能性が高いですか?
どんな助けでも大歓迎です。