2

私はglobal.asaxに以下を持っていますSession_Start

string myBrowser = Utils.SafeUserAgent(Request);
foreach (string bannedbrowser in BrowserBan.BrowsersToBan)
{
   if (myBrowser.IndexOf(bannedbrowser, StringComparison.OrdinalIgnoreCase) > -1)
   {
       HttpContext.Current.Response.Redirect("/bannedBrowser.htm");
       Session.Abandon();
       break;
   }

トランスコーダーが自分のサイトにアクセスするのを防ぎます。しかし、時々エラーが表示されます

System.Web.HttpException: Session state has created a session id, but cannot
  save it because the response was already flushed by the application.
    at System.Web.SessionState.SessionIDManager.SaveSessionID(
      HttpContext context, String id, Boolean& redirected, Boolean& cookieAdded)
    at System.Web.SessionState.SessionStateModule.CreateSessionId()
    at System.Web.SessionState.SessionStateModule.DelayedGetSessionId()
    at System.Web.SessionState.SessionStateModule.ReleaseStateGetSessionID()
    at System.Web.SessionState.SessionStateModule.OnReleaseState(Object source,
      EventArgs eventArgs)
    at System.Web.SessionState.SessionStateModule.OnEndRequest(Object source,
      EventArgs eventArgs)
    at System.Web.HttpApplication.SyncEventExecutionStep.System.Web
      .HttpApplication.IExecutionStep.Execute()
    at System.Web.HttpApplication.ExecuteStep(IExecutionStep step,
      Boolean& completedSynchronously)

これは、(Google Transcoder などを使用して) アクセスしようとした場合にのみ発生しますが、なぜ発生するのか、どうすれば防止できるのかを理解したいと考えています。

リフレッシュ時にユーザーエージェントが再評価されるように、セッションを放棄する必要があります。

4

2 に答える 2

4

このスレッドを見たことがありますか?

この例外が(別のコンテキストで)発生し、次のように修正しました...

void Session_Start(object sender, EventArgs e) 
{
string id = Session.SessionID;
}
于 2009-09-24T16:59:18.540 に答える
2

セッションの放棄とリダイレクトの順序を入れ替えてみましたか?

Session.Abandon();
HttpContext.Current.Response.Redirect("/bannedBrowser.htm", true);
于 2009-09-24T16:54:57.237 に答える