私は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()を呼び出します
最も簡単な方法は、2つの異なるタブでページを開き、他のタブでログアウトすると、最初のタブでセッションが自動的に期限切れになることです。ほとんどのブラウザはタブ全体でセッションを共有します。だから、web.configで何も変更せずに非常に簡単だと思います。このようにして、特定の機能がセッションの期限切れ時にログインへのリダイレクトを処理していない場合でもテストできます。
AppPoolをバウンスすると、セッションが失われます。
直接IISアクセス権がない場合は、Web.Configを開いて保存し、同じことを行うことができます(メモ帳を使用しないでください。エンコードが失敗します)。
タイムアウトを短くしてください。
あなたはあなたのwebconfigでタイムアウトを変更することができます
<authentication mode="Forms">
<forms timeout="10" protection="All" slidingExpiration="true" loginUrl="~/login.aspx" cookieless="UseCookies"/>
</authentication>
セッション情報をCookieに保存している場合は、Cookieを削除してみてください。
サーバー上のアプリプールをリサイクルします。
私は通常ASP .NETセッション状態サーバーを使用します。開発中の他の利点は別として、単にASP .NET状態サービスを再起動してセッションを中止できます。 。状態サーバーを使用している場合は、services.mscを実行して「ASP .NET State Service」を再起動するだけです。
あなたは2つのオプションがあります:-
1- web.configでセッションタイムアウトを減らします。 2-再起動IISまたはアプリケーションプール。