(57)【特許請求の範囲】
【請求項１】
サーバコンピュータシステムが、クライアントコンピュータシステム上で実行されるウェブブラウザのウィンドウから発信された、ユニフォームリソースロケータ（ＵＲＬ）および第１のウィンドウ識別子を含む第１の要求を受け取ることと、
前記サーバコンピュータシステムが、前記クライアントコンピュータシステム上で実行される前記ウェブブラウザの第２のウィンドウから発信された第２の要求を受け取ることとを含み、前記第２の要求は、前記ＵＲＬおよび前記第１のウィンドウに対応する第１のウィンドウ識別子を含み、
前記第２の要求がＨＴＴＰ  ＧＥＴまたはＨＴＴＰ  ＨＥＡＤ要求でであるかどうかを判断することと、
前記サーバコンピュータシステムが、前記第１の要求に関連付けられたループバック識別子を生成することと、
前記サーバコンピュータシステムが、前記要求に関連付けられるユーザセッションに前記ループバック識別子を格納することと、
前記サーバコンピュータシステムが、前記ＵＲＬ、前記第１のウィンドウ識別子、および前記ループバック識別子を含むスクリプトを生成することと、
前記サーバコンピュータシステムが、前記ウェブブラウザの前記第２のウィンドウへ前記スクリプトを送ることとを含み、前記スクリプトは前記クライアントコンピュータシステムによってキャッシュ可能でないように構成されており、
前記クライアントコンピュータシステム上で実行される前記ウェブブラウザに、前記第２のウィンドウが新たなウィンドウであるか既存のウィンドウであるかの判断を容易にするために前記スクリプトを実行させることを含み、前記判断は、前記スクリプトに含まれる前記第１のウィンドウ識別子と、前記第２のウィンドウの実際のウィンドウ識別子との比較を含み、
第３の要求を前記第２のウィンドウから前記サーバコンピュータシステムに送信することを可能にすることを含み、前記第３の要求は、
前記スクリプトに含まれる前記第１のウィンドウ識別子と前記第２のウィンドウの前記実際のウィンドウ識別子とが一致する場合に、前記ＵＲＬと、前記第１のウィンドウに対応する前記第１のウィンドウ識別子と、前記ループバック識別子とを含み、
前記スクリプトに含まれる前記第１のウィンドウ識別子と前記第２のウィンドウの前記実際のウィンドウ識別子とが一致しない場合に、前記ＵＲＬと、前記第２のウィンドウの前記実際のウィンドウ識別子と、前記ループバック識別子とを含む、方法。
【請求項２】
サーバコンピュータシステムが、クライアントコンピュータシステム上で実行されるウェブブラウザのウィンドウから発信された、ユニフォームリソースロケータ（ＵＲＬ）および第１のウィンドウ識別子を含む第１の要求を受け取ることと、
前記サーバコンピュータシステムが、前記クライアントコンピュータシステム上で実行される前記ウェブブラウザの第２のウィンドウから発信された第２の要求を受け取ることとを含み、前記第２の要求は、前記ＵＲＬおよび前記第１のウィンドウに対応する第１のウィンドウ識別子を含み、
前記サーバコンピュータシステムが、前記第１の要求に関連付けられたループバック識別子を生成することと、
前記サーバコンピュータシステムが、前記要求に関連付けられるユーザセッションに前記ループバック識別子を格納することと、
前記サーバコンピュータシステムが、前記ＵＲＬ、前記第１のウィンドウ識別子、および前記ループバック識別子を含むスクリプトを生成することと、
前記サーバコンピュータシステムが、前記ウェブブラウザの前記第２のウィンドウへ前記スクリプトを送ることとを含み、前記スクリプトは前記クライアントコンピュータシステムによってキャッシュ可能でないように構成されており、
前記クライアントコンピュータシステム上で実行される前記ウェブブラウザに、前記第２のウィンドウが新たなウィンドウであるか既存のウィンドウであるかの判断を容易にするために前記スクリプトを実行させることを含み、前記判断は、前記スクリプトに含まれる前記第１のウィンドウ識別子と、前記第２のウィンドウの実際のウィンドウ識別子との比較を含み、
第３の要求を前記第２のウィンドウから前記サーバコンピュータシステムに送信することを可能にすることを含み、前記第３の要求は、
前記スクリプトに含まれる前記第１のウィンドウ識別子と前記第２のウィンドウの前記実際のウィンドウ識別子とが一致する場合に、前記ＵＲＬと、前記第１のウィンドウに対応する前記第１のウィンドウ識別子と、前記ループバック識別子とを含み、
前記スクリプトに含まれる前記第１のウィンドウ識別子と前記第２のウィンドウの前記実際のウィンドウ識別子とが一致しない場合に、前記ＵＲＬと、前記第２のウィンドウの前記実際のウィンドウ識別子と、前記ループバック識別子とを含む、方法。
【請求項３】
前記ループバック識別子はランダムに生成される数である、請求項１または２に記載の方法。
【請求項４】
前記第１の要求はハイパーテキスト転送プロトコル（ＨＴＴＰ）要求である、請求項１から３のいずれかに記載の方法。
【請求項５】
前記スクリプトは、前記第２の要求がＨＴＴＰ  ＧＥＴまたはＨＥＡＤ要求である場合に、前記第２のウィンドウに送られる、請求項４に記載の方法。
【請求項６】
前記第２の要求がＨＴＴＰ  ＧＥＴまたはＨＴＴＰ  ＨＥＡＤ要求であるか否かを判断することをさらに含み、
前記第２の要求がＨＴＴＰ  ＧＥＴまたはＨＴＴＰ  ＨＥＡＤ要求である場合に、前記スクリプトは前記第２のウィンドウに送信される、請求項２に記載の方法。
【請求項７】
前記スクリプトに含まれる前記第１のウィンドウ識別子が、現在のウィンドウの識別子と一致する場合、前記第２の要求は、前記ＵＲＬと、前記ループバック識別子と、前記第１のウィンドウ識別子とを含む、請求項１から６のいずれかに記載の方法。
【請求項８】
前記スクリプトに含まれる前記第１のウィンドウ識別子が、前記第２の前記ウィンドウの識別子と一致しない場合、前記第２の要求は、前記ＵＲＬと、前記ループバック識別子と、前記第１のウィンドウ識別子とは異なる第２のウィンドウ識別子とを含み、前記第２のウィンドウ識別子は、前記現在のウィンドウの識別子に対応する、請求項７に記載の方法。
【請求項９】
前記サーバコンピュータシステムが、前記第２の要求を受け取ることと、
前記サーバコンピュータシステムが、前記第２の要求に含まれる前記ループバック識別子を前記ユーザセッションに格納される前記ループバック識別子とマッチングすることと、
前記ループバック識別子を前記ユーザセッションから除去することとをさらに含む、請求項８に記載の方法。
【請求項１０】
前記第２の要求が前記第１のウィンドウ識別子を含む場合、前記サーバコンピュータシステムが、前記第２のウィンドウが新しいウィンドウであると判断することと、
前記第２の要求が前記第２のウィンドウ識別子を含む場合、前記サーバコンピュータシステムが、前記第２のウィンドウが既存のウィンドウであると判断することとをさらに含む、請求項９に記載の方法。
【請求項１１】
前記サーバコンピュータシステムが、前記第２のウィンドウが前記新しいウィンドウであるかまたは前記既存のウィンドウであるかどうかに基づき、前記ＵＲＬについてのコンテンツをレンダリングすることと、
前記サーバコンピュータシステムが、レンダリングされた前記コンテンツを前記第２のウィンドウに送ることとをさらに含む、請求項１０に記載の方法。
【請求項１２】
サーバコンピュータシステムであって、プロセッサを含み、前記プロセッサは、
クライアントコンピュータシステム上で実行されるウェブブラウザのウィンドウから発信された、ユニフォームリソースロケータ（ＵＲＬ）および第１のウィンドウ識別子を含む第１の要求を受け取り、
前記サーバコンピュータシステムが、前記クライアントコンピュータシステム上で実行される前記ウェブブラウザの第２のウィンドウから発信された第２の要求を受け取るように構成されており、前記第２の要求は、前記ＵＲＬおよび前記第１のウィンドウに対応する第１のウィンドウ識別子を含み、
前記プロセッサは、
前記第１の要求に関連付けられるループバック識別子を生成し、
前記要求に関連付けられるユーザセッションに前記ループバック識別子を格納し、
前記ＵＲＬ、前記第１のウィンドウ識別子、および前記ループバック識別子を含むスクリプトを生成し、かつ
前記ウェブブラウザの前記第２のウィンドウへ前記スクリプトを送り、
前記クライアントコンピュータシステム上で実行される前記ウェブブラウザに、前記第２のウィンドウが新たなウィンドウであるか既存のウィンドウであるかの判断を容易にするために前記スクリプトを実行させるように構成されており、前記判断は、前記スクリプトに含まれる前記第１のウィンドウ識別子と、前記第２のウィンドウの実際のウィンドウ識別子との比較を含み、
前記プロセッサは、
第３の要求を前記第２のウィンドウから前記サーバコンピュータシステムに送信することを可能にするように構成されており、前記第３の要求は、
前記スクリプトに含まれる前記第１のウィンドウ識別子と前記第２のウィンドウの前記実際のウィンドウ識別子とが一致する場合に、前記ＵＲＬと、前記第１のウィンドウに対応する前記第１のウィンドウ識別子と、前記ループバック識別子とを含み、
前記スクリプトに含まれる前記第１のウィンドウ識別子と前記第２のウィンドウの前記実際のウィンドウ識別子とが一致しない場合に、前記ＵＲＬと、前記第２のウィンドウの前記実際のウィンドウ識別子と、前記ループバック識別子とを含む、サーバコンピュータシステム。
【請求項１３】
前記プロセッサは、
前記第２の要求がＨＴＴＰ  ＧＥＴまたはＨＴＴＰ  ＨＥＡＤ要求であるか否かを判断するようにさらに構成されており、
前記第２の要求がＨＴＴＰ  ＧＥＴまたはＨＴＴＰ  ＨＥＡＤ要求である場合に、前記スクリプトは前記第２のウィンドウに送信される、請求項１２に記載のサーバコンピュータシステム。
【請求項１４】
請求項１から１１のいずれかに記載の方法を１つ以上のプロセッサに実行させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
関連出願への相互参照
本願は、２０１１年１月６日に出願された、「新しいブラウザウィンドウを検出するための技術（TECHNIQUES FOR DETECTING NEW BROWSER WINDOWS）」という名称の米国出願番号第１２／９８５，７９９号の利益を主張する。その全内容は、すべての目的について本願明細書において参照により援用される。本開示は、２０１１年１月６日に出願された「非アクティブなブラウザウィンドウを検出するための技術（TECHNIQUES FOR DETECTING NEW BROWSER WINDOWS）」という名称の、共通に譲渡された同時係属中の米国特許出願番号第１２／９８５，８０５号に関連付けられる。当該同時係属中の米国特許出願は、すべての目的について本願明細書において全文参照により援用される。
【背景技術】
【０００２】
背景
本開示は一般的にウェブアプリケーションに関し、特にこのようなアプリケーションにおいてクライアント側のブラウザウィンドウのライフサイクルをトラッキングするための技術に関する。
【０００３】
一般的に言うと、ウェブアプリケーションは、サーバ上にホスティングされるソフトウェアアプリケーションであって、クライアント側のウェブブラウザを介してユーザによってアクセス可能なものである。典型的な使用の場合では、ユーザはクライアント側のブラウザウィンドウを開き、当該アプリケーションの最初のウェブページに進む。ユーザはそこから、（たとえばページマークアップに埋め込まれたフォーム要素を介して）情報を入力し得る、および／または何らかのタスクもしくは処理を完了するために当該アプリケーションのさらに別のページに進み得る。
【発明の概要】
【発明が解決しようとする課題】
【０００４】
いくつかの場合では、ユーザは、当該アプリケーションにアクセスしながら、既存のブラウザウィンドウの文脈から新しいブラウザウィンドウを開くことがある。これにより、ブラウザはサーバに、既存のウィンドウに表示されるアプリケーションページについて新しい要求を送る。現在の実現例では、サーバは一般的に、この新しいウィンドウのイベントと、ユーザが既存のウィンドウをリロード／リフレッシュする状態とを区別することができない。いずれの場合でも、サーバが受け取った要求は、既存のウィンドウから発信されたように思われる。サーバは典型的に、各ブラウザウィンドウごとに別個のアプリケーション状態情報を維持しているのでページをレンダリングする前にどのウィンドウを取り扱っているのかを知る必要があるため、これは問題となり得る。たとえば、サーバが誤ってクライアント要求が既存のウィンドウのリロードに対応すると判断した場合（実際には新しいウィンドウを開くことに対応する場合）、サーバは、要求を処理する際に、既存のウィンドウのアプリケーション状態を意図せず修正してしまう場合がある。
【０００５】
他の場合では、ユーザは、アプリケーションにアクセスするために用いたブラウザウィンドウを閉じるか、またはこのウィンドウ内で当該アプリケーションから離れる（たとえばサードパーティのウェブサイトへ離れる）ことがある。現在の実現例ではサーバは一般的に、これらの状態と、ユーザが同じアプリケーション中の別のウェブページに（当該ウィンドウ内で）進んだ状態とを区別することができない。いずれの場合でも、サーバは単に、ウィンドウ内のアプリケーションページがアンロード／破棄されたという通知をブラウザから受け取るだけである。これにより、サーバが、各ブラウザウィンドウごとにサーバによって維持されるメモリリソース（たとえば、アプリケーション状態情報）をいつ解放するのかを決定するのが困難になり得る。たとえば、ブラウザウィンドウがまだアプリケーションにアクセスするのに用いられているとサーバが誤って判断すると（実際にはユーザがウィンドウを閉じたかまたは当該アプリケーションから離れた場合）、サーバは、必要とされるよりも長く当該ウィンドウについてメモリにリソースを保持し得る。これは効率およびセキュリティの観点から望ましくない。
【課題を解決するための手段】
【０００６】
概要
本発明の実施例は、ウェブアプリケーションの文脈においてクライアント側のブラウザウィンドウのライフサイクルをトラッキングするための技術を提供する。実施例の一集合では、ウェブアプリケーションのサーバコンポーネントは、クライアント側のブラウザウィンドウから発信された要求を受け取り得る。この要求は、リソースロケータ（たとえばＵＲＬ）およびウィンドウ識別子を含む。これに応答して、サーバコンポーネントは、ウィンドウの実際の識別子／名前を取得するためにスクリプトをウィンドウに送り得る。当該スクリプトによって返された実際の識別子および最初の要求に含まれたウィンドウ識別子に基づき、サーバコンポーネントは、このウィンドウが新しいウィンドウであるか、または既存のウィンドウであるかを判断し得るとともに、上記要求を適切なように処理し得る。
【０００７】
実施例の別の集合では、サーバコンポーネントは、第１のクライアント側のブラウザウィンドウにおけるアプリケーションページがアンロード／破棄されたという通知を受け取り得る。これに応答して、サーバコンポーネントは、第１のウィンドウを失効時間に関連付け得るとともに、潜在的に非アクティブである（すなわち閉じられるかまたはもはやアプリケーションにアクセスするのに用いられていない）ウィンドウの「失効」リストに第１のウィンドウを加え得る。第１のウィンドウが失効リストにある間に第１のウィンドウからサーバコンポーネントが新しい要求を受け取った場合、サーバコンポーネントは、第１のウィンドウがアクティブであると識別して（すなわちアプリケーションにアクセスするようまだ用いられていると識別して）、第１のウィンドウを当該リストから除去し得る。第１のウィンドウが失効リストにある間に第２のウィンドウからサーバコンポーネントが新しい要求を受け取った場合、サーバコンポーネントは、第２のウィンドウからの要求を受け取った時間と、第１のウィンドウに関連付けられた失効時間とを比較し得る。当該要求の時間が失効時間よりも遅い場合、サーバコンポーネントは、第１のウィンドウが非アクティブであると識別し得るとともに、第１のウィンドウに関連付けられるすべてのリソースを解放し得る。
【０００８】
実施例のさらに別の集合では、サーバコンポーネントは、クライアント側のブラウザについて最後に残っているウィンドウにおけるアプリケーションページがアンロード／破棄されたという通知を受け取り得る。これに応答して、サーバコンポーネントは、当該ブラウザに関連付けられるユーザセッションについてのセッションタイムアウト変数を第１の持続時間（たとえば１時間）から第１の持続時間より短い第２の持続時間（たとえば１０分）に修正し得る。次いでサーバコンポーネントは、セッションタイムアウト変数のカウントダウンを始め得る。第２の持続時間が失効する前に最後に残っているウィンドウからサーバコンポーネントが要求を受け取れば、サーバコンポーネントは、当該ウィンドウがアクティブであると識別し得るとともに、セッションタイムアウト変数を第１の持続時間にリセットし得る。第２の持続時間が失効する前に、最後に残っているウィンドウから要求が受け取られなければ、サーバコンポーネントは当該ウィンドウが非アクティブであると識別し得、このウィンドウに関連付けられるすべてのリソースを解放し得、かつユーザセッションに関連付けられるすべてのリソースを解放し得る。
【０００９】
本発明の一実施例に従うと、サーバコンピュータシステムが、クライアントコンピュータシステム上で実行されるウェブブラウザのウィンドウから発信された、ユニフォームリソースロケータ（ＵＲＬ）および第１のウィンドウ識別子を含む第１の要求を受け取ることと、上記サーバコンピュータシステムが、ループバック識別子を生成することと、上記サーバコンピュータシステムが、上記要求に関連付けられるユーザセッションに上記ループバック識別子を格納することとを含む方法が提供される。上記方法はさらに、上記サーバコンピュータシステムが、上記ＵＲＬ、上記第１のウィンドウ識別子、および上記ループバック識別子を含むスクリプトを生成することと、上記サーバコンピュータシステムが、上記第１の要求を発信した上記ウィンドウへ上記スクリプトを送ることとを含む。
【００１０】
一実施例では、上記スクリプトは、上記第１の要求を発信した上記ウィンドウが新しいウィンドウであるかまたは既存のウィンドウであるかどうかの判断を促進するよう、上記クライアントコンピュータシステム上で実行される上記ウェブブラウザによって実行可能である。
【００１１】
一実施例では、上記ループバック識別子はランダムに生成される数である。
一実施例では、上記第１の要求はハイパーテキスト転送プロトコル（ＨＴＴＰ）要求である。
【００１２】
一実施例では、上記スクリプトは、上記第１の要求がＨＴＴＰ  ＧＥＴまたはＨＥＡＤ要求である場合にのみ、上記第１の要求を発信した上記ウィンドウに送られる。
【００１３】
一実施例では、上記スクリプトは、上記クライアントコンピュータシステム上において、上記第１のウィンドウ識別子が上記第１の要求を発信した上記ウィンドウの識別子と一致するかどうかを判断し、かつ当該判断に基づき、第２の要求を上記サーバコンピュータシステムに送るよう構成されている。
【００１４】
一実施例では、上記第１のウィンドウ識別子が、上記第１の要求を発信した上記ウィンドウの識別子と一致する場合、上記第２の要求は、上記ＵＲＬと、上記ループバック識別子と、上記第１のウィンドウ識別子とを含む。
【００１５】
一実施例では、上記第１のウィンドウ識別子が、上記第１の要求を発信した上記ウィンドウの識別子と一致しない場合、上記第２の要求は、上記ＵＲＬと、上記ループバック識別子と、上記第１のウィンドウ識別子とは異なる第２のウィンドウ識別子とを含む。
【００１６】
一実施例では、上記方法は、上記サーバコンピュータシステムが、上記第２の要求を受け取ることと、上記サーバコンピュータシステムが、上記第２の要求に含まれる上記ループバック識別子を上記ユーザセッションに格納される上記ループバック識別子とマッチングすることと、上記ループバック識別子を上記ユーザセッションから除去することとをさらに含む。
【００１７】
一実施例では、上記方法は、上記第２の要求が上記第１のウィンドウ識別子を含む場合、上記サーバコンピュータシステムが、上記第１の要求を発信した上記ウィンドウが新しいウィンドウであると判断することと、上記第２の要求が上記第２のウィンドウ識別子を含む場合、上記サーバコンピュータシステムが、上記第１の要求を発信した上記ウィンドウが既存のウィンドウであると判断することとをさらに含む。
【００１８】
一実施例では、上記方法は、上記サーバコンピュータシステムが、上記第１の要求を発信した上記ウィンドウが新しいウィンドウであるかまたは既存のウィンドウであるかどうかに基づき、上記ＵＲＬについてのコンテンツをレンダリングすることと、上記サーバコンピュータシステムが、レンダリングされた上記コンテンツを上記第１の要求を発信した上記ウィンドウに送ることとをさらに含む。
【００１９】
本発明の別の実施例に従うと、プロセッサによって実行可能な命令を格納する一時的でないコンピュータ読取可能記憶媒体が提供される。上記命令は、クライアントコンピュータシステム上で実行されるウェブブラウザのウィンドウから発信された、ユニフォームリソースロケータ（ＵＲＬ）および第１のウィンドウ識別子を含む第１の要求を上記プロセッサに受け取らせる命令と、ループバック識別子を上記プロセッサに生成させる命令と、上記プロセッサに、上記要求に関連付けられるユーザセッションに上記ループバック識別子を格納させる命令とを含む。上記命令はさらに、上記ＵＲＬ、上記第１のウィンドウ識別子、および上記ループバック識別子を含むスクリプトを上記プロセッサに生成させる命令と、上記プロセッサに、上記第１の要求を発信した上記ウィンドウへ上記スクリプトを送らせる命令とを含む。
【００２０】
本発明の別の実施例に従うと、サーバコンピュータシステムが提供される。上記サーバコンピュータシステムはプロセッサを含み、上記プロセッサは、クライアントコンピュータシステム上で実行されるウェブブラウザのウィンドウから発信された、ユニフォームリソースロケータ（ＵＲＬ）および第１のウィンドウ識別子を含む第１の要求を受け取り、ループバック識別子を生成し、かつ上記要求に関連付けられるユーザセッションに上記ループバック識別子を格納するよう構成されている。上記プロセッサはさらに、上記ＵＲＬ、上記第１のウィンドウ識別子、および上記ループバック識別子を含むスクリプトを生成し、かつ上記第１の要求を発信した上記ウィンドウへ上記スクリプトを送るよう構成されている。
【００２１】
明細書の残りの部分および添付の図面への参照によって、本願明細書において開示される実施例の性質および利点がさらに理解され得る。
【図面の簡単な説明】
【００２２】
【図１】本発明の実施例に従ったシステムを示す簡略ブロック図である。
【図２】本発明の実施例に従った、クライアント側のブラウザウィンドウが新しいウィンドウまたは既存のウィンドウであるかどうかを判断するための処理を示すフロー図である。
【図３】本発明の実施例に従った、クライアント側のスクリプトによって行われる処理を示すフロー図である。
【図４】本発明の実施例に従った、クライアント側のブラウザウィンドウが新しいウィンドウまたは既存のウィンドウであるかどうかを判断するためのさらに別の処理を示すフロー図である。
【図５】本発明の実施例に従った、クライアント側のブラウザウィンドウが非アクティブであるかどうかを判断するための処理を示すフロー図である。
【図６】本発明の実施例に従った、クライアント側のブラウザウィンドウが非アクティブであるかどうかを判断するためのさらに別の処理を示すフロー図である。
【図７】本発明の実施例に従った、クライアント側ブラウザの最後に残っているウィンドウが非アクティブであるかどうかを判断するための処理を示すフロー図である。
【図８】本発明の実施例に従ったシステム環境を示す簡略ブロック図である。
【図９】本発明の実施例に従ったコンピュータシステムを示す簡略ブロック図である。
【発明を実施するための形態】
【００２３】
詳細な説明
以下の記載において、本発明の実施例が理解されるように説明目的のために多くの詳細を記載する。しかしながら、ある実施例がこれらの詳細のうちのいくつかがなくても実施され得るということは当業者には明らかであろう。
【００２４】
本発明の実施例は、ウェブアプリケーションの文脈においてクライアント側のブラウザウィンドウのライフサイクルをトラッキングするための技術を提供する。実施例の一集合では、ウェブアプリケーションのサーバコンポーネントは、クライアント側のブラウザウィンドウから発信された要求を受け取り得る。この要求は、リソースロケータ（たとえばＵＲＬ）およびウィンドウ識別子を含む。これに応答して、サーバコンポーネントは、ウィンドウの実際の識別子／名前を取得するためにスクリプトをウィンドウに送り得る。当該スクリプトによって返された実際の識別子および最初の要求に含まれたウィンドウ識別子に基づき、サーバコンポーネントは、このウィンドウが新しいウィンドウであるか、または既存のウィンドウであるかを判断し得るとともに、上記要求を適切なように処理し得る。
【００２５】
実施例の別の集合では、サーバコンポーネントは、第１のクライアント側のブラウザウィンドウにおけるアプリケーションページがアンロード／破棄されたという通知を受け取り得る。これに応答して、サーバコンポーネントは、第１のウィンドウを失効時間に関連付け得るとともに、潜在的に非アクティブである（すなわち閉じられるかまたはもはやアプリケーションにアクセスするのに用いられていない）ウィンドウの「失効」リストに第１のウィンドウを加え得る。第１のウィンドウが失効リストにある間に第１のウィンドウからサーバコンポーネントが新しい要求を受け取った場合、サーバコンポーネントは、第１のウィンドウがアクティブであると識別して（すなわちアプリケーションにアクセスするようまだ用いられていると識別して）、第１のウィンドウを当該リストから除去し得る。第１のウィンドウが失効リストにある間に第２のウィンドウからサーバコンポーネントが新しい要求を受け取った場合、サーバコンポーネントは、第２のウィンドウからの要求を受け取った時間と、第１のウィンドウに関連付けられた失効時間とを比較し得る。当該要求の時間が失効時間よりも遅い場合、サーバコンポーネントは、第１のウィンドウが非アクティブであると識別し得るとともに、第１のウィンドウに関連付けられるすべてのリソースを解放し得る。
【００２６】
実施例のさらに別の集合では、サーバコンポーネントは、クライアント側のブラウザについて最後に残っているウィンドウにおけるアプリケーションページがアンロード／破棄されたという通知を受け取り得る。これに応答して、サーバコンポーネントは、当該ブラウザに関連付けられるユーザセッションについてのセッションタイムアウト変数を第１の持続時間（たとえば１時間）から第１の持続時間より短い第２の持続時間（たとえば１０分）に修正し得る。次いでサーバコンポーネントは、セッションタイムアウト変数のカウントダウンを始め得る。第２の持続時間が失効する前に最後に残っているウィンドウからサーバコンポーネントが要求を受け取れば、サーバコンポーネントは、当該ウィンドウがアクティブであると識別し得るとともに、セッションタイムアウト変数を第１の持続時間にリセットし得る。第２の持続時間が失効する前に、最後に残っているウィンドウから要求が受け取られなければ、サーバコンポーネントは当該ウィンドウが非アクティブであると識別し得、このウィンドウに関連付けられるすべてのリソースを解放し得、かつユーザセッションに関連付けられるすべてのリソースを解放し得る。
【００２７】
図１は、本発明のある実施例に従ったシステム１００を示す簡略ブロック図である。示されるように、システム１００は、サーバ１０４と通信するクライアント１０２を含み得る。クライアント１０２は、ウェブブラウザ１０６を実行できる任意のタイプの電子装置またはシステムであり得る（たとえば、デスクトップコンピュータ、ラップトップコンピュータ、タブレットコンピュータ、スマートフォン、携帯情報端末（ＰＤＡ）、セットトップボックス、ビデオゲームシステムなど）。利用可能なウェブブラウザの例は、Mozilla Firefox（登録商標）、Microsoft Internet Explorer（登録商標）、Google Chrome（登録商標）、およびApple Safari（登録商標）などを含む。さまざまな実施例では、ウェブブラウザ１０６は、サーバ１０４がホスティングするウェブアプリケーションのようなウェブリソースにアクセスするよう、クライアント１０２の１人以上のユーザによって動作され得る。
【００２８】
ある実施例では、ウェブブラウザ１０６は、複数のブラウザウィンドウ１０８を介してユーザが複数のウェブリソースに同時にアクセスするのを可能にし得る。たとえば、ユーザはブラウザ１０６において第１のブラウザウィンドウを開き、第１のウェブページ「Ａ」に進み得る。第１のブラウザウィンドウの文脈から、このユーザは、１つ以上の付加的な（新しい）ブラウザウィンドウを開き得、これによりウェブページＡの付加的なインスタンスが取得されて新しいウィンドウにおいてレンダリングされる。そこから、ユーザは開いているウィンドウのいずれかを用いて他のウェブページに進み得る。ユーザはさらに、ユーザが自身のブラウジングセッションを終えると、開いているウィンドウのうち１つ以上を閉じ得る。
【００２９】
本願明細書において用いられるように、「ブラウザウィンドウ」および「ウィンドウ」という用語は、リソース識別子（たとえばＵＲＬ）によって識別されたウェブコンテンツを表示することが可能なブラウザ１０６の任意のビューポートを指し得る。典型的にはタブは単独のウィンドウとは考えられないが、特定の実施例では「ブラウザウィンドウ」および「ウィンドウ」という用語は、ブラウザの「タブ」を指し得る。
【００３０】
サーバ１０４は、アプリケーション１１４のようなウェブアプリケーションをホスティングすることが可能な任意のタイプの電子装置またはシステムであり得る。実施例の一集合では、サーバ１０４は、ウェブブラウザ１０６とウェブアプリケーション１１４との間の相互作用を扱うとともに、動的なウェブページ作製、ロードバランシング、およびセキュリティなどといったさまざまなサービスを提供するよう構成されるアプリケーションサーバコンポーネント１１０を含み得る。特定の実施例では、アプリケーションサーバ１１０は、ハイパーテキスト転送プロトコル（ＨＴＴＰ）要求をクライアント１０２のブラウザ１０６から受け取るとともに、それらの要求をアプリケーションサーバ１１０および／またはアプリケーション１１４に処理のために渡すよう構成されるウェブサーバコンポーネント１１２を含み得る。ウェブサーバ１１２はさらにＨＴＴＰ応答（たとえば、レンダリングされたＨＴＭＬ）をブラウザ１０６に返し得る。
【００３１】
実施例の一集合では、アプリケーションサーバ１１０は、ウェブブラウザ１０６のウィンドウ１０８のようなクライアント側のブラウザウィンドウのライフサイクルをトラッキングするよう構成され得る。たとえば一実施例では、アプリケーションサーバ１１０は、アプリケーション１１４へのアクセス中にブラウザ１０６のユーザが新しいブラウザウィンドウを開いた時を検出し得るとともに、当該新しいウィンドウイベントと、既存のブラウザウィンドウに対するリロード／リフレッシュイベントとを区別し得る。別の実施例では、アプリケーションサーバ１１０は、ブラウザ１０６のユーザがウィンドウを閉じるかまたはアプリケーション１１４から離れることによってブラウザウィンドウを非アクティブにした時を検出し得るとともに、それらの状態を、ユーザが単にアプリケーション１１４の別のウェブページに進んだだけの状態と区別し得る。これらの場合においてアプリケーションサーバ１１０が行う具体的な処理の詳細を以下の図２〜図７に関連して説明する。
【００３２】
システム１００は、クライアント１０２およびサーバ１０４に加えて、データ格納部１１６をさらに含み得る。データ格納部１１６は、サーバ１０４に通信可能に結合され得るとともに、ウェブアプリケーション１１４といったサーバ１０４のさまざまなコンポーネントのためにデータ格納サービスを提供し得る。サーバ１０４およびデータ格納部１１６は、システム１００において別個のエンティティとして示されているが、当業者であれば、サーバ１０４およびデータ格納部１１６は単一の物理的な機械または別個の物理的な機械に対応し得るということを理解するであろう。
【００３３】
図１は例示であって、本発明の実施例を限定することを意図していないということが理解されるべきである。たとえば、システム１００のさまざまなエンティティは各々、付加的な機能を有してもよく、または具体的に記載されない付加的なコンポーネントを含んでもよい。さらに、単一のクライアント、１つのサーバ、および１つのデータ格納部が示されるが、任意の数のこのようなエンティティがサポートされ得る。当業者であれば、多くの変形例、修正例、および代替例を認識するであろう。
【００３４】
新しいクライアント側のブラウザウィンドウの検出
上で示されるように、ある実施例ではアプリケーションサーバ１１０は、ブラウザ１０６のユーザが、アプリケーション１１４へのアクセス中に新しいブラウザウィンドウを開いた時を判断できるとともに、その新しいウィンドウイベントを既存のブラウザウィンドウに対するリロード／リフレッシュイベントと区別できる。図２は、本発明の実施例に従った、この新しいウィンドウ検出を実現するためにアプリケーションサーバ１１０が行ない得る処理２００を示す図である。さまざまな実施例では、処理２００は、ハードウェア、ソフトウェア、またはそれらの組合せにおいて実現され得る。ソフトウェアとして、処理２００は、機械読取可能記憶媒体上に格納されるプログラムコードとしてエンコードされ得る。
【００３５】
ブロック２０２では、アプリケーションサーバ１１０は、クライアント側のウェブブラウザ１０６のあるウィンドウから発信された、ウェブアプリケーション１１４によって提供されるリソース（たとえばウェブページ）についてのＨＴＴＰ要求を受け取り得る。さまざまな実施例ではこの要求は、当該リソースの識別子（たとえばＵＲＬ）と、特定のブラウザウィンドウの識別子とを含み得る。たとえばこの要求は、ＵＲＬ「Ｘ」とウィンドウ識別子「ウィンドウ１」とを含み得る。ほとんどの場合、要求に含まれるウィンドウ識別子は、要求を発信したブラウザウィンドウの識別子に対応することとなる。しかしながら、この要求が既存のウィンドウの文脈から作り出された新しいウィンドウから発信された場合、要求に含まれるウィンドウ識別子は、新しいウィンドウではなく既存のウィンドウの識別子／名前に対応することとなる。したがってこれらの場合、アプリケーションサーバ１１０は、ウィンドウ識別子のみに基づき、発信元のウィンドウが新しいウィンドウかまたは既存のウィンドウかどうかを識別することが容易にできない。
【００３６】
ブロック２０４では、アプリケーションサーバ１１０は当該要求が、ＪａｖａＳｃｒｉｐｔ（登録商標）をサポートしているユーザエージェントからのコンテンツのページについてのＨＴＴＰ  ＧＥＴまたはＨＥＡＤ要求であるかどうかを判断し得る。当該要求がこの特定のカテゴリに該当しない場合は、アプリケーションサーバ１１０は、上記発信元のブラウザウィンドウが新しいウィンドウではないと判断し得る。したがって、アプリケーションサーバ１１０は、要求されたＵＲＬについてコンテンツをレンダリング／取得し、レンダリング／取得されたコンテンツとともに応答をブラウザウィンドウに送る通常の処理フローを行い得る（ブロック２０６，２０８）。
【００３７】
この要求がＪａｖａＳｃｒｉｐｔ（登録商標）をサポートするユーザエージェントからのコンテンツについてのＨＴＴＰ  ＧＥＴまたはＨＥＡＤ要求である場合、アプリケーションサーバ１１０はさらに、当該要求がリダイレクトであるかどうか判断し得る（ブロック２１０）。この要求がリダイレクトであれば、アプリケーションサーバ１１０は上述したように、ブロック２０６，２０８の処理フローを実行し得る。
【００３８】
当該要求がリダイレクトでない場合、アプリケーションサーバ１１０は、この要求は新しいブラウザウィンドウから発信され得たと判断し得る。これに応答して、アプリケーションサーバ１１０は、提案されたウィンドウ識別子およびループバック識別子を生成し、当該ループバック識別子を、要求に関連付けられるユーザセッションに格納し得る（ブロック２１２）。実施例の一集合では、ループバック識別子はランダムに生成された数であり得る。アプリケーションサーバ１１０はさらに、ループバック識別子と、提案されたウィンドウ識別子と、受け取られた要求からのＵＲＬおよびウィンドウ識別子（たとえば、「Ｘ」および「ウィンドウ１」）とを含むクライアント側のスクリプトを生成し得るとともに、当該スクリプトを発信元のブラウザウィンドウへ送り得る（ブロック２１４，２１６）。実施例の一集合では、クライアント側のスクリプトは、クライアント側のブラウザ１０６によってキャッシュ可能ではないように構成され得る。次いで、発信元のブラウザウィンドウの実際の識別子を取得するよう、クライアント側のスクリプトはブラウザ１０６によって実行され得、これにより発信元のウィンドウが新しいウィンドウかまたは既存のウィンドウかどうかの判断を促進する。
【００３９】
図３は、ブロック２１４にて送られたクライアント側のスクリプトを受け取って実行する際にウェブブラウザ１０６によって行われ得る処理３００を示す図である。ブロック３０２では、ブラウザ１０６は、スクリプトに含まれるウィンドウ識別子（すなわちブロック２０２にて受け取られた要求から抽出されるウィンドウ識別子）が現在のブラウザウィンドウ（すなわち要求を発信したウィンドウ）の識別子／名前と一致するかどうか判断し得る。この識別子同士が一致した場合、現在のウィンドウは既存のウィンドウであるということが示される。この場合、ブラウザ１０６は、クライアント側のリダイレクトを開始し、オリジナルのＨＴＴＰ要求をミラーリングした（たとえば、ＵＲＬ「Ｕ１」およびウィンドウ識別子「ウィンドウ１」を含む）、ループバック識別子を追加した第２のＨＴＴＰ要求をサーバ１０４に送り得る（ブロック３０４）。
【００４０】
上記の識別子同士が一致しなかった場合、現在のウィンドウは新しいウィンドウであることが示される。この場合、ブラウザ１０６は、現在のウィンドウについてすでにウィンドウ識別子が存在するかどうか判断し得る（ブロック３０６）。たとえば、ブラウザ１０６は、ウィンドウを開く際に、新しい名前／識別子をウィンドウに自動的に割り当てていてもよい。このような既存の識別子が見つかると、ブラウザ１０６はクライアント側のリダイレクトを開始して、ループバック識別子と、ＵＲＬと、既存の識別子とを含む第２のＨＴＴＰ要求をサーバ１０４に送り得る（ブロック３０８）。既存のウィンドウ識別子が見つからなかった場合、ブラウザ１０６はクライアント側のリダイレクトを開始して、ループバック識別子と、ＵＲＬと、図２のブロック２１２にて生成された提案されたウィンドウ識別子とを含む第２のＨＴＴＰ要求を送り得る（ブロック３１０）。
【００４１】
ブラウザ１０６が図３のブロック３０４，３０８，または３１０にて送った第２のＨＴＴＰ要求を受け取る際には、アプリケーションサーバ１１０は、図４の処理４００を行い得る。ブロック４０２および４０４にて、アプリケーションサーバ１１０は、当該第２のＨＴＴＰ要求を受け取り、第２の要求に含まれるループバック識別子をユーザセッションに格納されたループバック識別子とマッチングし得る。ループバック識別子同士が一致すれば、アプリケーションサーバは、この第２の要求が（ユーザアクションに応答してではなく）ブロック２１４にて送られたクライアント側のスクリプトに応答して生成されたものであることが分かる。したがって、アプリケーションサーバ１１０は、ループバック識別子をセッションから除去し得（ブロック４０６）、処理４００の残りへと進む。
【００４２】
ブロック４０８では、アプリケーションサーバ１１０は、第２の要求に含まれるウィンドウ識別子が、ブロック２０２にて受け取られたオリジナルの要求に含まれるウィンドウ識別子と一致するかどうか判断し得る。これらの識別子同士が一致すれば、アプリケーションサーバ１１０は、ブロック２０２のオリジナルの要求を発信したウィンドウは既存のウィンドウであると結論付け得る。代替的には、識別子同士が一致しなければ、サーバ１０４は、ブロック２０２のオリジナルの要求を発信したウィンドウは新しいウィンドウであると結論付け得る。次いで、アプリケーションサーバ１１０は、当該ＵＲＬについてのコンテンツをレンダリング／取得し、レンダリング／取得されたコンテンツを含む応答を発信元のブラウザウィンドウへ送ることによってオリジナルの要求を処理し得る（ブロック４１４，４１６）。
【００４３】
特定の実施例では、このオリジナルの要求の処理は、発信元のウィンドウが新しいウィンドウまたは既存のウィンドウであると判断されるかどうかに基づき、異なり得る。たとえば、発信元のウィンドウがブロック４１０ごとに既存のウィンドウであると判断されれば、アプリケーションサーバ１１０は、当該ウィンドウに関連付けられるアプリケーション状態情報を自由に更新／修正し得る。しかしながら、当該発信元のウィンドウが、ブロック４１２ごとに新しいウィンドウであると判断されれば、アプリケーションサーバ１１０は、如何なる既存のウィンドウの状態も変更されないままであることを確実にするために適切なステップを採り得る。この態様で、アプリケーションサーバ１１０は、新しいウィンドウからの要求を処理する際に、当該既存のウィンドウの状態を意図せず破棄／無効にすること回避し得る。
【００４４】
処理２００、３００、および４００は例示であって、変形および修正が可能であるということが理解されるべきである。たとえば、連続的として記載されるステップは、並行に実行されてもよく、ステップの順番は変更されてもよく、かつステップは、修正、組み合せ、付加、または省略されてもよい。当業者であれば、多くの変形例、修正例、および代替例を認識するであろう。
【００４５】
非アクティブなクライアント側のブラウザウィンドウの検出
ある実施例では、アプリケーションサーバ１１０は、ブラウザ１０６のユーザがウィンドウを閉じるかまたはアプリケーション１１４から離れることによってブラウザウィンドウを非アクティブにした時を検出し得るとともに、それらの状態を、ユーザが単にアプリケーション１１４の別のウェブページに進んだ場合と区別し得る。図５は、本発明の実施例に従った、この非アクティブウィンドウ検出を実現するためにアプリケーションサーバ１１０が実行し得る処理５００を説明する図である。さまざまな実施例では、処理５００は、ハードウェア、ソフトウェア、またはそれらの組合せにおいて実現され得る。ソフトウェアとして、処理５００は、機械読取可能記憶媒体上に格納されたプログラムコードとしてエンコードされ得る。
【００４６】
ブロック５０２として、アプリケーションサーバ１１０は、ウェブブラウザ１０６において開いているブラウザウィンドウの「アクティブ」リストを維持し得る。アプリケーションサーバ１１０の観点から、あるブラウザウィンドウがウェブアプリケーション１１４にアクセスするのに用いられているならば、当該ブラウザウィンドウは「アクティブ」であると考えられる。このアクティブリストは、ブラウザに関連付けられるユーザセッションの一部として格納され得る。実施例の一集合では、アクティブリストにおける各々のウィンドウについてのエントリは、当該ウィンドウの識別子と、ウィンドウに表示されている現在のページの指示とを含み得る。
【００４７】
ブロック５０４では、アプリケーションサーバ１１０は、アクティブブラウザウィンドウにおけるアプリケーションページがアンロード／破棄されたという通知をブラウザ１０６から受け取り得る。このような通知は、たとえば、ユーザが当該ウィンドウを閉じたか、またはユーザがウィンドウ内で異なるウェブページへ進んだ場合に受け取られてもよい。これに応答して、アプリケーションサーバ１１０は、失効時間をアクティブウィンドウに関連付け得るとともに、当該ウィンドウを、潜在的に非アクティブ（すなわちアプリケーションにアクセスするのにもはや用いられていない）ウィンドウの「失効」リストに加え得る（ブロック５０６，５０８）。
【００４８】
さらに、アプリケーションサーバ１１０は、アクティブリストにおけるウィンドウのすべてが現在失効リスト中にあるかどうか判断し得る（ブロック５１０）。失効リスト中になければ、さらに多くのアンロード／破棄通知をアプリケーションサーバ１１０が受け取ると、ブロック５０４〜５１０のステップは繰り返され、これによりさらに別のアクティブウィンドウが失効リストに加えられる。アクティブウィンドウのすべてが現在失効リスト中に存在すれば、アプリケーションサーバ１１０は、ユーザセッションレベルのリソースを解放するかどうか判断する特別な処理を行い得る。この処理は、以下の図７に関連して議論される。
【００４９】
図５の処理は図６の処理６００に続いている。ブロック６０２では、アプリケーションサーバ１１０は、以前ブロック５０８において失効リスト中に配置された特定のブラウザウィンドウから発信されたＨＴＴＰ要求を受け取り得る。この要求の受け取りは、当該ウィンドウがまだアプリケーション１１４にアクセスするのに用いられていることを示しているので、アプリケーションサーバ１１０は、当該ウィンドウはまだアクティブであると結論を下し、このウィンドウを失効リストから除去し得る（ブロック６０４）。アプリケーションサーバ１１０はまた、受け取られた要求に含まれた最新のＵＲＬで、アクティブリスト中のウィンドウのエントリを更新し得る。
【００５０】
ブロック６０６では、アプリケーションサーバ１１０は、失効リストに残っているウィンドウを検討し、各ウィンドウごとに、ブロック６０２にて要求が受け取られた時間と、当該ウィンドウに関連付けられる失効時間とを比較し得る。この要求の時間がウィンドウについての失効時間よりも遅ければ、アプリケーションサーバ１１０は、ウィンドウが非アクティブ（すなわち、アプリケーション１１４にアクセスするのにもはや用いられていない）であると識別するとともに、アクティブリストおよび失効リストの両方から当該ウィンドウを除去し得る。アプリケーションサーバ１１０はさらに、そのウィンドウに関連付けられるメモリリソース（たとえばアプリケーション状態情報など）を解放し得る。
【００５１】
この要求の時間がウィンドウについての失効時間よりも早ければ、アプリケーションサーバ１１０は、当該ウィンドウを失効リストに残し得る。このウィンドウは、そのウィンドウから新しい要求が受け取られるまで（ウィンドウがまだアクティブであることを示す）、またはウィンドウに関連付けられる失効時間よりも遅い時間に異なるウィンドウから新しい要求が受け取られるまで（ウィンドウがおそらく非アクティブであることを示す）、失効リスト中に残留し得る。
【００５２】
ブラウザウィンドウにおいて、ユーザが第１のアプリケーションページから第２のアプリケーションページに進んだ場合、アプリケーションサーバ１１０は、第１のページが破棄／アンロードされたという通知を受け取る前に、第２のページについての要求を受け取り得る。これは、ＨＴＴＰはメッセージが送られた順番と同じ順番で受け取られることを保証しないからである。このため、ある実施例ではアプリケーションサーバ１１０は、各ウィンドウに表示されている現在のページを記録し、古いページに関するアンロード通知を無視し得る。
【００５３】
たとえば、ブラウザウィンドウＡが現在、アプリケーションページ１を表示しているとする。さらに、ウィンドウＡのユーザがアプリケーションページ１からアプリケーションページ２に進むが、（ウィンドウＡ，ページ１）についてのアンロード通知より前に、アプリケーションサーバ１１０が（ウィンドウＡ，ページ２）についての要求を受け取るとする。（ウィンドウＡ，ページ２）についての要求がひとたび受け取られると、アプリケーションサーバ１１０は、ウィンドウＡについての現在のページがページ２であるようにアクティブウィンドウリストを更新し得る。（ウィンドウＡ，ページ１）についてのアンロード通知がその後受け取られると、アプリケーションサーバ１１０は、ウィンドウＡについての現在のページはページ１ではない（ページ２である）ので、このアンロード通知を無視し得る。したがって、これにより、アンロード通知を受け取った際に、アプリケーションサーバ１１０が失効リストにウィンドウＡを誤って加えることが防止される。
【００５４】
処理５００および６００は例示であって、変形および修正が可能であるということが理解されるべきである。たとえば、連続的として記載されるステップは、並行に実行されてもよく、ステップの順番は変更されてもよく、かつステップは、修正、組み合せ、付加、または省略されてもよい。当業者であれば、多くの変形例、修正例、および代替例を認識するであろう。
【００５５】
上述したように、ある実施例では、アプリケーションサーバ１１０は、あるユーザセッションについて最後に残っているブラウザウィンドウが非アクティブ化／閉じられた時を検出するよう特別な処理を用い得る。この処理は、図７の処理７００において例示される。さまざまな実施例では、処理７００は、ハードウェア、ソフトウェア、またはそれらの組合せにおいて実現され得る。ソフトウェアとして、処理７００は、機械読取可能記憶媒体上に格納されたプログラムコードとしてエンコードされ得る。
【００５６】
ブロック７０２では、アプリケーションサーバ１１０は、あるユーザセッションについて最後に残っているブラウザウィンドウ（すなわちアクティブリスト中の最後のウィンドウ）におけるアプリケーションページがアンロード／破棄されたと判断し得る。これは、実施例の一集合では、アクティブリストおよび失効リスト中のウィンドウの集合が同じであるかを比較することによって達成され得る。最後に残っているブラウザウィンドウがアンロード／破棄されたと判断されると、アプリケーションサーバ１１０は、ユーザセッションに関連付けられるセッションタイムアウト変数を第１の時間期間（たとえば１時間）から第１の時間期間より短い第２の時間期間（たとえば１０分）に修正し得、当該変数のカウントダウンを始め得る（ブロック７０４）。
【００５７】
当該セッションタイムアウト変数が失効する前にＨＴＴＰ要求が任意のウィンドウから受け取られれば、アプリケーションサーバ１１０は、そのセッションはまだアクティブであると結論を下し得、セッションタイムアウト変数を第１の時間期間にリセットし得る（ブロック７０６，７０８）。さらに、処理は図６のブロック６０２に戻り得る。
【００５８】
しかしながら、当該セッションタイムアウト変数が失効する前に要求が任意のウィンドウから受け取られなければ、アプリケーションサーバ１１０は、最後に残っているウィンドウは非アクティブである（したがって、全ユーザセッションが閉じられている）という結論を下し得る。したがって、アプリケーションサーバ１１０は、ウィンドウおよびユーザセッションに関連付けられるリソースのすべてを解放し得る（ブロック７１０）。
【００５９】
処理７００は例示であって、変形および修正が可能であるということが理解されるべきである。たとえば、連続的として記載されるステップは、並行に実行されてもよく、ステップの順番は変更されてもよく、かつステップは、修正、組み合せ、付加、または省略されてもよい。当業者であれば、多くの変形例、修正例、および代替例を認識するであろう。
【００６０】
図８は、本発明の実施例に従ったシステム環境８００を示す簡略ブロック図である。示されるように、システム環境８００は、１つ以上のクライアントコンピュータシステム８０２，８０４，８０６，８０８と、サーバコンピュータシステム８１０と、ネットワーク８１２と、データベース８１４とを含み得る。さまざまな実施例では、クライアントコンピュータシステム８０２，８０４，８０６，８０８、サーバコンピュータシステム８１０、およびデータベース８１４は、図１のクライアント１０２、サーバ１０４、およびデータ格納部１１６をそれぞれ実現するよう用いられ得る。
【００６１】
クライアントコンピュータシステム８０２，８０４，８０６，８０８は、汎用のパーソナルコンピュータ（たとえば、デスクトップコンピュータおよび／もしくはラップトップコンピュータ）、タブレットコンピュータ、スマートフォン、ＰＤＡ、ならびに／またはワークステーションコンピュータであり得る。代替的には、クライアントコンピュータシステム８０２，８０４，８０６，８０８は、図１のブラウザ１０６のようなウェブブラウザを実行することができる任意の他のタイプの電子装置であり得る。システム環境８００は４つのクライアントコンピュータシステムを有するよう示されているが、任意の数のクライアントコンピュータシステムがサポートされ得るということが理解されるべきである。
【００６２】
ネットワーク８１２は、ＴＣＰ／ＩＰ、ＳＮＡ、ＩＰＸ、およびＡｐｐｌｅＴａｌｋなどといったネットワークプロトコルを用いるデータ通信をサポートし得る、当業者が精通している任意のタイプのネットワークであり得る。単に例示目的として、ネットワーク８１２は、Ｅｔｈｅｒｎｅｔ（登録商標）ネットワークのようなローカルエリアネットワーク（ＬＡＮ）、ワイドエリアネットワーク、仮想プライベートネットワーク（ＶＰＮ）を含むがそれに限定されない仮想ネットワーク、インターネット、無線ネットワーク（たとえば、ＩＥＥＥ８０２．１１プロトコルスイート、当該技術において公知のＢｌｕｅｔｏｏｔｈ（登録商標）プロトコル、および／もしくは任意の他の無線プロトコルのいずれかに基づき動作するネットワーク）、ならびに／またはこれらおよび／もしくは他のネットワークの任意の組合せであり得る。
【００６３】
サーバコンピュータシステム８１０は、汎用コンピュータ、特殊化サーバコンピュータ（たとえば、ＰＣサーバ、ＵＮＩＸ（登録商標）サーバ、メインフレームサーバ、ラックマウント型サーバなど）、サーバクラスタ、または任意の他の適切な構成および／もしくはコンピュータの組合せであり得る。サーバコンピュータシステム８１０は、Ｍｉｃｒｏｓｏｆｔ  Ｗｉｎｄｏｗｓ（登録商標）、Ａｐｐｌｅ  ＯＳ  Ｘ（登録商標）、Ｌｉｎｕｘ（登録商標）、およびＳｏｌａｒｉｓ（登録商標）などといった任意のコンシューマまたはサーバオペレーティングシステムを実行できる。サーバコンピュータシステム８１０はまた、図１のアプリケーションサーバ１１０およびウェブアプリケーション１１４を含む、さまざまなサーバアプリケーションおよび／またはミッドティアアプリケーションのいずれかを実行し得る。
【００６４】
デー夕ベース８１４は、コンピュータシステム８０２、８０４、８０６、８０８、および８１０の１つ以上に対してローカルな（および／または存在している）記憶媒体に存在し得る。代替的には、データベース８１４は、コンピュータシステム８０２，８０４，８０６，８０８，８１０のいずれかまたはすべてからリモートであり得、および／または（たとえば、ネットワーク８１２を介して）これらのうちの１つ以上と通信し得る。実施例の一集合では、データベース８１４は、当業者が精通しているストレージエリアネットワーク（ＳＡＮ）に存在し得る。同様に、コンピュータシステム８０２，８０４，８０６，８０８，８１０に帰属する機能を実行するための任意の必要なファイルが適切なように、それぞれのコンピュータ上にローカルに格納され得る、および／またはデータベース８１４上にリモートに格納され得る。実施例の一集合では、データベース８１４は、オラクル社から入手可能なＯｒａｃｌｅ  １１ｇのような、ＳＱＬフォーマットのコマンドに応答してデータを格納、更新、および取得するよう適合されるリレーショナルデータベースであり得る。
【００６５】
図９は、本発明のある実施例に従ったコンピュータシステム９００を示す簡略ブロック図である。さまざまな実施例では、コンピュータシステム９００は、上記のシステム環境８００について記載したコンピュータシステム８０２、８０４、８０６、８０８、および８１０のいずれかを実現するよう用いられ得る。示されるように、コンピュータシステム９００は、バス９２４を介して電気的に結合されるハードウェア要素を含み得る。ハードウェア要素は、１つ以上の中央処理装置（ＣＰＵ）９０２と、１つ以上の入力装置９０４（たとえばマウス、キーボードなど）と、１つ以上の出力装置９０６（たとえば、表示装置、プリンタなど）とを含み得る。コンピュータシステム９００はさらに、１つ以上の記憶装置９０８を含み得る。例示として、記憶装置９０８は、プログラム可能および／またはフラッシュ更新可能などである、ディスクドライブ、光学記憶装置、ランダムアクセスメモリ（ＲＡＭ）および／もしくはリードオンリメモリ（ＲＯＭ）のようなソリッドステート記憶装置といった装置を含み得る。
【００６６】
コンピュータシステム９００はさらに、コンピュータ読取可能記憶媒体読取部９１２と、通信サブシステム９１４（たとえば、モデム、ネットワークカード（無線または有線）、赤外線通信装置など）と、上述したようなＲＡＭおよびＲＯＭ装置を含み得るワーキングメモリ９１８とを含み得る。いくつかの実施例では、コンピュータシステム９００はさらに、デジタル信号プロセッサ（ＤＳＰ）および／または特殊目的プロセッサなどを含み得る処理促進部９１６を含み得る。
【００６７】
コンピュータ読取可能記憶媒体読取部９１２は、コンピュータ読取可能記憶媒体９１０に接続され得、これらはともに（随意では、記憶装置９０８と組み合わせて）、リモート、ローカル、固定、および／またはリムーバブルの記憶装置と、コンピュータ読取可能な情報を一時的および／またはより永続的に保存する記憶媒体とを包括的に表わす。通信システム９１４は、ネットワーク８１２および／またはシステム環境８００について上述した任意の他のコンピュータとデータが交換されることを可能にし得る。
【００６８】
コンピュータシステム９００はさらに、ワーキングメモリ９１８内に現在存在しているように示されるソフトウェア要素を含み得る。このソフトウェア要素は、オペレーティングシステム９２０および／または（クライアント側のウェブブラウザ、ミドルティア／サーバアプリケーションなどであってもよい）アプリケーションプログラムのような他のコード９２２を含む。コンピュータシステム９００の代替的な実施例は、上記のものの多くの変形例を有し得るということが理解されるべきである。たとえば、カスタマイズされたハードウェアが用いられ得るとともに特定の要素がハードウェア、ソフトウェア、またはその両方において実現され得る。さらに、ネットワーク入出力装置のような他のコンピューティング装置への接続も採用され得る。
【００６９】
コンピュータシステム９００によって実行可能なコードまたはコードの一部を保存するためのコンピュータ読取可能記憶媒体は、揮発性／不揮発性およびリムーバブル／非リムーバブルの媒体のような、しかしこれらに限定されない当該技術において公知または用いられる任意の適切な媒体を含み得る。コンピュータ読取可能記憶媒体の例は、データおよび／またはプログラムコードを格納するよう用いられ得るとともにコンピュータによってアクセスされ得るＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ、フラッシュメモリ、ＣＤ−ＲＯＭ、デジタルバーサタイルディスク（ＤＶＤ）、または他の光学記憶媒体、磁気カセット、磁気テープ、磁気ディスク記憶装置、または他の磁気記憶装置、任意の他の媒体を含む。
【００７０】
上記において、本発明の具体的な実施例を記載してきたが、さまざまな修正例、変更例、代替的な構成、および均等例が本発明の範囲内にある。たとえば、本発明の実施例をあるフロー図およびステップについて説明したが、当業者であれば、本発明の範囲は記載された図／ステップに限定されないことは明確であるはずである。
【００７１】
さらに、本発明の実施例をハードウェアおよびソフトウェアの特定の組合せを用いて説明したが、ハードウェアおよびソフトウェアの他の組合せも本発明の範囲内であると認識されるべきである。
【００７２】
したがって、明細書および図面は、限定的な態様ではなく例示的な態様であるとみなされるべきである。添付の特許請求の範囲に記載されるより広い本発明の精神および範囲から逸脱することがなければ、追加、削減、および他の修正もなされてもよいということが明らかであろう。
【図１】
0006018080.tif 000002
【図２】
0006018080.tif 000003
【図３】
0006018080.tif 000004
【図４】
0006018080.tif 000005
【図５】
0006018080.tif 000006
【図６】
0006018080.tif 000007
【図７】
0006018080.tif 000008
【図８】
0006018080.tif 000009
【図９】
0006018080.tif 000010