2012-05-10 17 views
0

私は現在、私たちのサイトでセッションタイムアウトを処理するためのアクションフィルタを追加してい:セッションタイムアウト後にSystem.Security.Principal.Identity.IsAuthenticatedを設定するもの

[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フラグを期待していますアクションフィルタ(私はGlobal.asaxのSession_Endにブレークポイントを置いたので、セッションがタイムアウトしたことを知っています。これが最初にヒットします)。

私たちのサイトの認証は、企業標準の「シングルサインオン」DLLによって処理されるため、別の認証タイムアウトを設定していると思われます。

何か助けていただければ幸いです。

+0

私が間違っているかもしれないが、私はこの記事では、便利な http://www.hanselman.com/blog/SystemThreadingThreadCurrentPrincipalVsSystemWebHttpContextCurrentUserOrWhyFormsAuthenticationCanBeSubtle.aspx またはこの条 http://stackoverflow.com/questions/6810808/threadに来るかもしれないと思います-currentprincipal-identity-vs-httpcontext-user-identity –

答えて

0

おそらく少し出かけるかもしれませんが、ビジネスの他のチームと相談した後、企業の "シングルサインオン" dllを使用する他のサイトのモデルに従い、 Session.KeepAliveメソッドを使用するので、このアクションフィルタは必要ありません。

2

は、私はあなたが

は、私は、ユーザーが積極的にWebアプリケーションにサービスを提供しているかどうかを尋ねるれているもの、あなたがのThread.CurrentPrincipalでやって考えるHttpContext.User.IdentityでThread.CurrentPrincipal.Identity.IsAuthenticatedを交換したいと思いますあなたのサーバーが認証されます。あなたがしたいことは、ユーザーが認証されているかどうかを確認することです。

+0

このため、Thread.CurrentPrincipalをHttpContext.User.Identityに置き換えましたが、同じ結果が得られました。 MajoBが言っているように、セッションはタイムアウトしていますが、認証Cookieはまだ認証されていると言えます。私はあなたの答えとHanslemanのブログ投稿へのリンクから何かを学んだからです。 –

1

セッションと認証のCookieは異なるものです。あなたはまだ認証されているが期限切れのセッションを持っているユーザーを持つことができます。 asp.net cookies, authentication and session timeouts

+0

ありがとうございます。セッションがタイムアウトしてもPrincipal.Identityがまだ認証されているのが分かります。 –

関連する問題