2011-10-21 18 views
1

セッションの有効期限が切れているかどうかを確認するために、各アクションでSessionExpireFilterを使用しています。セッションの有効期限が切れている場合、それはsessionTimeoutPageにユーザーをリダイレクトするフィルタが常にSessionTimeOutページにリダイレクトするASP.net MVC

public class SessionExpireFilterAttribute : ActionFilterAttribute 
{ 
    /// <summary> 
    /// Called when [action executing]. 
    /// </summary> 
    /// <param name="filterContext">The filter context.</param> 
    public override void OnActionExecuting(ActionExecutingContext filterContext) 
    { 
     HttpContext ctx = HttpContext.Current; 

     // check if session is supported 
     if (ctx.Session != null) 
     { 
      // check if a new session id was generated 
      if (ctx.Session.IsNewSession) 
      { 
       // If it says it is a new session, but an existing cookie exists, then it must 
       // have timed out 
       string sessionCookie = ctx.Request.Headers["Cookie"]; 
       if ((null != sessionCookie) && (sessionCookie.IndexOf("ASP.NET_SessionId") >= 0)) 
       { 
        if (ctx.Request.IsAuthenticated) 
        { 
         FormsAuthentication.SignOut(); 
        } 

        //HttpCookie mycookie = new HttpCookie("ASP.NET_SessionId"); 
        //mycookie.Expires = DateTime.MinValue; 
        //ctx.Response.Cookies.Add(mycookie); 
        //ctx.Session.Clear(); 

        RouteValueDictionary redirectTargetDictionary = new RouteValueDictionary(); 
        redirectTargetDictionary.Add("action", "SessionTimeOut"); 
        redirectTargetDictionary.Add("controller", "Membership"); 
        filterContext.Result = new RedirectToRouteResult(redirectTargetDictionary); 

       } 
      } 
     } 

     base.OnActionExecuting(filterContext); 
    } 
} 

like-見えすなわちmembershipControllerとSESSIONTIMEOUTビュー

の問題は、私はまた、そのフィルタを持っている会員コントローラログインアクションメソッドを持っています。セッションの有効期限をチェックし、常にASP.NET_SessionIdクッキーを見つけ、sessionTimeoutページにリダイレクトします(ログインページへのリンクがあります)。

誰かが助けてくれるといいですね。

答えて

0

このソリューションを使用するには、Session.StartイベントをGlobal.asaxでワイヤリングする必要があります。それをやらなければ、Session.IsNewSessionは常にtrueになります(これがASP.NETランタイムの動作です)。セッションに何か(何か)を保存する必要がある場合もあります。

+0

私はもう一度ログインをやっているので、いいと思います。私が持っている問題は、ASP.Net_sessionクッキーは常に新しいセッションにもあります。 – Amit

+0

これは、ランタイムの仕組み(そしてログインの実行はセッションとは関係ありません)を信じています。チェック。 – tpeczek

+0

申し訳ありませんが、イベントを配線することで動作していませんでした – Amit

関連する問題