ASP.Net Web サイトのブラックボックス テストを行っていますが、さまざまなセッション タイムアウト シナリオをテストする必要があります。
セッションタイムアウトを完全にカプセル化したかどうかはわかりません。それ以外に、ページを 20 分間開いたままにしておくと、セッション タイムアウトを強制する簡単な方法はありますか?
タイムアウトを減らす
これをテストする最も簡単で邪魔にならない方法は、おそらくタイムアウトを 3 分から 5 分などのかなり小さい値に減らすことです。このようにして、アプリケーションの再起動や特別なリセット コードがテスト結果に影響を与えることを心配することなく、数分間一時停止してより長い一時停止をシミュレートできます。
セッション状態のタイムアウトは、グローバル (該当する .NET Framework バージョンの config フォルダーにある web.config 内) またはアプリケーションのみのいくつかの場所で変更できます。
アプリケーションのタイムアウトを変更するには、アプリケーションの web.config に次を追加します。
<system.web>
<sessionState timeout="60" />
...
または、IIS 構成ダイアログを使用して、アプリケーションのこの同じ設定を変更することもできます (ただし、アプリケーションに web.config を定義する必要があると思います。そうしないと、構成の編集が無効になります)。
これにアクセスするには、IIS で Web アプリケーションを右クリックし、[プロパティ] | [プロパティ] に移動します。ASP.NET タブ | 構成の編集 | 状態管理タブ | セッション タイムアウト (分)。
コードを使用してこの設定を操作することもできることに注意してください。これが既に行われている場合、web.config ファイルの設定は事実上無視され、別の手法を使用する必要があります。
Session.Abandon() を呼び出す
タイムアウトを低く設定するよりも少し煩わしい手法は、Session.Abandon() を呼び出すことです。ただし、現在のページのすべてのスクリプト コマンドが処理されるまでセッションは実際には終了しないため、アプリケーションとは別のページからこれを呼び出すようにしてください。
私の理解では、これは、実際に待機せずにセッション タイムアウトをテストするためのかなりクリーンな方法であるということです。
アプリケーションの再起動を強制する
セッション状態のデフォルト構成では、アプリケーションを再起動させてセッションを完全に吹き飛ばすことで、セッション タイムアウトをシミュレートできます。これにはいくつかの方法がありますが、そのいくつかを以下に示します。
「デフォルト構成」とは、「InProc」セッション状態モードを使用するように構成された Web アプリケーションを意味します。Web アプリケーションが再起動されても、実際にセッション状態を維持できる他のモードがあります (StateServer、SQLServer、Custom)。
状態追跡メカニズムの改ざん
Web アプリケーションが「Cookie なし」モード (デフォルトでは Cookie が使用される) で構成されていないと仮定すると、クライアント ブラウザーからセッション ID を含む Cookie を削除できます。
ただし、サーバーはセッションを認識しているため、これは実際にはタイムアウトをシミュレートするものではなく、誰もそれを使用していないことがわかります。セッション ID のないリクエストは、新しいセッションを必要とする目に見えないリクエストとして扱われます。これは、テストしたいものである場合とそうでない場合があります。
サイトにページを追加し、Session.Abandon() を呼び出します
AppPool をバウンスすると、セッションが失われます。
IIS に直接アクセスできない場合は、Web.Config を開いて保存し、同じことを行うことができます (メモ帳を使用しないでください。エンコーディングが台無しになります)。
タイムアウトを短くしてください。
webconfigでタイムアウトを変更できます
<authentication mode="Forms">
<forms timeout="10" protection="All" slidingExpiration="true" loginUrl="~/login.aspx" cookieless="UseCookies"/>
</authentication>
セッション情報を Cookie に保存している場合は、Cookie を削除してみてください。
サーバー上のアプリ プールをリサイクルします。
次の 2 つのオプションがあります。
1- web.config でセッション タイムアウトを減らします。2- IIS またはアプリケーション プールを再起動します。
私は通常、ASP .NET セッション状態サーバーを使用します。開発中の他の利点とは別に、ASP .NET 状態サービスを再起動してセッションを破棄するだけです。状態サーバーを使用している場合は、services.msc を実行して "ASP .NET State Service" を再起動します。