MVC アプリの Global.asax で次のように処理できるイベントを探しています。
1) リクエストがアプリケーションによって処理される前に、リクエストごとにイベントが発生します。
と
Session
2)オブジェクト ( ) が使用可能になった時点でイベントが発生し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
オブジェクトにアクセスできないため、そうはなりません。私が間違っている場合は、私の理解を修正してください。