セッション処理をカスタマイズする状況の判断

スクリプト内の WebPageUrl 呼び出しが、クエリ文字列の一部にセッション ID を含む URL を使用する場合、このスクリプトが再生されると、それと同じハードコードされた静的なセッション ID がサーバーに送信されます。しかし、この セッション ID では再生セッションを正しく識別できません。これは、以前の記録セッションを表しているに過ぎないため、スクリプトを再生するとエラーが発生します。

スクリプト内の静的なセッション ID を、実行時に生成される動的な値に置換しないと、Web アプリケーションでは、次のようなエラーが生成されます: セッションが期限切れです。ログイン画面に戻ってください。

Silk Performer のセッション処理方法の性質上、ほとんどの Web アプリケーションでは、セッション処理のカスタマイズは必要ありません。まれに、手動によるセッションのカスタマイズが必要になった場合でも、TrueLog Explorer を利用して、簡単にその作業を実行できます。

Silk Performer では、ハードコードされたセッション ID を手動で処理する必要性が減るように、次の 2 つのセッション ID 処理方法を使用しています。

クッキー管理

Silk Performer は、クッキーを使用してセッション情報を交換するサーバーに対して、動的なセッション ID 値を自動的に処理します。Silk Performer は、ブラウザのクッキー管理を正確にエミュレートするので、ブラウザと同じように、サーバーにクッキーを送信できます。このため、手動でやり取りをして、状態を維持する必要がありません。

ページ レベルの Web API

記録の際にページ レベルの API を使用する (これがデフォルト設定) と、WebPageLinkWebPageSubmit などの、コンテキストのある Web API 関数呼び出しを生成するスクリプトが提供されます。コンテキストを持つ Web API 呼び出しは、HTTP レベルではなく、HTML レベルで動作します。したがって、URL をパラメータとして使用しません。コンテキストを持つ API 呼び出しに対しては、手動によるセッションのカスタマイズは必要ありません。Silk Performer のページ レベルの API が使用されるのは、ワークフロー - プロジェクトの概要設定 ダイアログ ボックスの [アプリケーションの種類] で [Web business transaction (HTML/HTTP)] が選択されている場合です。
注: Silk Performer の低レベルのブラウザ ベースの API よりも、Silk Performer のページ レベルの API を使用することを強くお勧めします。

HTML を動的に生成するためにクライアント側の JavaScript を利用している場合は、Silk Performer の Recorder が HTML のコンテキストを失って、コンテキストのない Web API 呼び出しが生成されることがあります。コンテキストなしの Web API 呼び出し (WebPageUrlWebPageForm など) には、パラメータとして URL が含まれます。このようなまれなケースでは、スクリプトにハードコードされたセッション ID が含まれています。このようなセッション ID は、Web API 呼び出しの URL パラメータ内や、スクリプトの DCLFORM セクションで宣言されているフォーム フィールド内で見つけることができます。

カスタマイズする必要がないコンテキストを持つスクリプトの例を以下に示します。

transaction TMain
  begin
    WebPageUrl("http://myHost/ShopIt/"); // first call always context-less
    WebPageLink("Join the experience!");
    WebPageSubmit("Enter", SHOPIT_MAIN_ASP001);
    WebPageLink("Products");
  end TMain;

dclform
  SHOPIT_MAIN_ASP001:
    "SessionID"       := "" <USE_HTML_VAL>, // hidden value: 
                                            // LGIJALLCGEBMIBIMFKOEJIMM2
                                            // recognized as a hidden
                                            // form field, the value is
                                            // taken from the actual
                                            // HTML form field.
    "name"            := "Tester",          // changed
    "New Name Button" := "" <USE_HTML_VAL>; // unchanged value: "Enter"

コンテキストなしの関数を含むスクリプトの例 (カスタマイズが必要な静的なセッション データが DCLFORM セクションに含まれている) を以下に示します。

transaction TMain
begin
  WebPageUrl("http://myHost/ShopIt/"); // first call always context-less
  WebPageUrl("http://myHost/ShopIt/main.asp", NULL, SHOPIT_MAIN_ASP001);
  WebPageForm("http://myHost/ShopIt/main.asp", SHOPIT_MAIN_ASP002);
  WebPageUrl("http://myHost/ShopIt/products.asp");
end TMain;

dclform
  SHOPIT_MAIN_ASP001:
    "from"     := "welcome";

  SHOPIT_MAIN_ASP002:
    "SessionID"       := "LGIJALLCGEBMIBIMFKOEJIMM2",
    "name"            := "Tester",
    "New Name Button" := "Enter";