0

明らかな理由なしにセッションがリセットされるという非常に特殊な問題に直面しています。これはランダムに発生し、数十または数百のリクエストごとに1回発生します。

私のWebアプリケーションは、Windows 2003、IIS 6.0、.NET1.1で実行されています。アプリケーションには、Page_Loadイベント中に一連のSession変数を設定するWebページがあります。データは、ASPNETStateServiceにアウトプロセスで保存されます。

Page_loadイベントが終了し、ページが表示された後、ユーザーはボタンをクリックします。ボタンをクリックすると、セッションデータが取得され、操作が行われます。そして、このButton_clickは、問題が発生する場所です。場合によっては、セッション変数がnullになり、nullRefExceptionが発生します。

トレースは、Button_clickイベント中のsessionIDが、Page_Loadイベントのセッションとは異なるIDを持つまったく新しいセッションであることを示しています。したがって、アプリケーションは、Page_Load中に保存されたデータの取得に失敗します。イベントログは、問題のあるリクエストのセッション変数が実際にPage_loadイベント中に入力され、応答が問題なく送信されることを示しています。これにより、通常はデータが保持されます。

セッションのタイムアウトを除外しました。タイムアウトすると同じnullRefExceptionが発生しますが、Page_loadからの同じセッションIDを使用して、存在しないデータを取得します。この場合、sessionIDは元のIDとは異なります。

ASPNET Cookieをいじったり、session.abandonを使用したり、セッションから誤ってアイテムを削除したりすることはありません。

私の質問は、どのサーバー側の要因がカード所有者のセッションをそのようにリセットさせる可能性があるかということです。アプリケーションイベントログには、有用な情報は含まれていません。

また、ページの後続のポストバック時にIISに新しいセッションを割り当てるように強制する可能性のあるクライアント側(Cookieの改ざんなど)はありますか?

よろしくお願いします。

4

1 に答える 1

2

これがあなたの状況に当てはまるかどうかはわかりませんが、他の人には役立つかもしれません。

私はウェブサイトをデザインしていて、難しい方法を見つけました。つまり、私が取り組んでいたこのサイトの一部を再デザインしなければならなかったということです。アクティブな IIS フォルダー内で (asp.net ページから) フォルダーを作成または削除すると、Web サイトのすべてのセッションがリセットされます。これは、現在サイトにいるすべてのユーザーのセッションが即座に削除されることを意味します。

サーバーを制御できる場合は、ファイルを IIS フォルダーの外に保存し、必要に応じてストリーミングします。サーバーを制御できない場合は、フォルダーの作業をすべて削除する必要があります。

于 2012-11-28T05:34:26.247 に答える