0

MVC アプリの Global.asax で次のように処理できるイベントを探しています。

1) リクエストがアプリケーションによって処理される前に、リクエストごとにイベントが発生します。

Session2)オブジェクト ( ) が使用可能になった時点でイベントが発生しHttpSessionStateます。

私がやろうとしていること

セッションタイムアウトの問題を処理しています。Session_Startしたがって、次のようなハンドラーがあります。

    protected void Session_Start(object sender, EventArgs args)
    {
        string requestCookies = Request.Headers["Cookie"];

        if ((null != requestCookies) && 
          (requestCookies.IndexOf("ASP.NET_SessionId") >= 0))
        {
            var requestBase = new HttpRequestWrapper(Request);

            if (requestBase.IsAjaxRequest())
            {
                Response.Write("Your session has expired. You need to login again.<br />");
                Response.End();
            }
            else
            {
                Response.Redirect("~/?expired");
            }
        }

内部に IFRAME があり、部分的なビューをロードする不正なページがいくつかあります。セッションの有効期限が切れたときに、ユーザーがそのような IFRAME をロードするリクエストをトリガーした場合、それは Ajax リクエストになるため、その場合は、そのようなリクエストの応答バッファーに直接書き込み、応答バッファーをフラッシュします。

ただし、ユーザーが誤ってまたは故意に (一部の悪意のあるユーザー) セッション タイムアウト メッセージを無視して IFRAME を再ロードしようとすると、前回新しいセッションが作成されているため、今回は Session_Start も呼び出されません。彼にはセッション タイムアウトの警告が送信されたため、有効なセッションが行われます。これは危険な状況になる可能性があります。避けたい。

したがって、リクエストごとに発生するイベントのハンドラーを作成し、HttpSessionState準備ができたときに発生するようにします。

そのBegin_Request時点では、HttpSessionStateオブジェクトにアクセスできないため、そうはなりません。私が間違っている場合は、私の理解を修正してください。

4

1 に答える 1

3

AcquireRequestState イベントを処理してみてください。

protected void Application_AcquireRequestState(object sender, EventArgs args)
{
    ...
}
于 2013-05-24T14:42:09.333 に答える