2

私のウェブサイトでは、mvc3かみそりを使用して構築された多くのajax呼び出しがあります。問題は、セッションがタイムアウトした後、ajaxを使用してアクションを呼び出すと、ログインページにリダイレクトされないことです。以下に示す属性を使用してセッションタイムアウトを処理しています。

public override void OnActionExecuting( ActionExecutingContext filterContext ) 
    {
        HttpContext ctx = HttpContext.Current;

       //  check if session is supported
        if(ctx.Request.IsAuthenticated)
        {


            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)
                    {
                        FormsAuthentication.SignOut();
                        const string loginUrl = @"~/Login/Login";
                        var rr = new RedirectResult(loginUrl);
                       filterContext.Result = rr;
                    }
                }
            }

        }
        else
        {

            ctx.Response.Redirect(@"~/Login/Login");
        }

        base.OnActionExecuting ( filterContext );
    }
4

1 に答える 1

1

渡す結果は、html ページと 302 を応答として ajax 要求に送信します。これを処理する他の方法があります:

  1. カスタムの応答コードを指定して ajax リクエストで確認し、成功関数で応答コードを確認します。
  2. または、応答オブジェクトを含むjsonオブジェクトを送信し、そこにチェックインします

これは、両方のメソッドの ajaxComplete イベントで実行でき、マスター ページ/レイアウト、または ajax 呼び出しがある場所に追加できます。

他の多くの質問にあるため、コードに貼り付けません。 StackOverflow Vaibhav へようこそ!

于 2012-08-01T08:49:52.973 に答える