Webアプリケーションでのセッション
OutSystemsのWebアプリケーションは、状態を保持していません。サーバーに対するエンドユーザーのリクエストは以前のリクエストを意識せずに行われています。
リクエストの状態が保持されていないという制約を克服するため、OutSystemsでは、エンドユーザーが行った以前のリクエストに関する情報をサーバー側で保持できるようにする複数の仕組みを用いています。その仕組みの1つがセッションです。
OutSystemsでは、エンドユーザーがPlatform Serverに対して行った最初のリクエストでセッションが作成されます。これにより、エンドユーザーとサーバーとのインタラクション中にコンテキストが維持できます。セッションは、エンドユーザーがインタラクション中にアクセスするモジュールで定義される一連のセッション変数で構成されます。セッション変数は、たとえば、ユーザーアクション、画面の準備、画面アクションなどのモジュールのビジネスロジックを実装する際に使用できます。
セッションはサーバー上に作成されます。一連のモジュールからユーザーとセッションを一元的に捉えることができるシングルサインオン機能を使用している場合は、複数のモジュールでセッションを共有することが可能です。
OutSystemsのセッションのライフサイクル
セッションはOutSystemsにより自動的に管理され、以下のように、ユーザーインタラクションで使用されるチャネルに依存します。
- Webセッション
- このセッションは、エンドユーザーがサーバーに対して確立した最初のリクエストの際に開始します。デフォルトでは、OutSystemsは、セッションを追跡するため、クッキーをエンドユーザーのブラウザに保存します。セッション情報は、URLを使用して送信されるように変更できます。エンドユーザーがログアウトした場合、セッションは明示的に終了します。一定時間が経過してもユーザーがサーバーに対するリクエストを行わなかったためにタイムアウトが発生した場合、セッションは自動的に終了します。
- Webサービスセッション
- このセッションは、Webサービスが呼び出されたときに作成され、このリクエストの間のみ存在します。つまり、複数のリクエストにわたってセッションが存在するわけではありません。
- タイマーセッション
- このセッションは、タイマーが呼び出されたときに作成され、このリクエストの間のみ存在します。つまり、複数の実行にわたってセッションが存在するわけではありません。
- SMSセッション
- このセッションは、エンドユーザーが特定の番号のインタラクションを確立したときに作成されます。SMSインタラクションは、エンドユーザーが起動するか、iSMS通知を通じて起動します。このセッションは、タプル(発信者のスマホ、受信者のスマホ)で識別されます。エンドユーザーがログアウトした場合、セッションは明示的に終了します。セッションタイムアウトが発生した場合、セッションは自動的に終了します。
セッション開始
WebインタラクションかSMSインタラクションかにかかわらず、エンドユーザーがサーバーに対して最初のリクエストを行ったときに新しいセッションが作成されます。このときにOnSessionStartイベントが起動し、それを処理するアクションが実行されます。
セッションタイムアウト
セッションタイムアウトでは、エンドユーザーとのインタラクションがないアイドル状態でセッションが継続できる期間を指定します。その時間が経過するとPlatform Serverによってセッションは自動的に終了します。
セッションタイムアウトのデフォルト値はアプリケーションサーバーにより異なります。
- .NET
- 20分(この値は
machine.config
ファイルで設定できます)。 - J2EE
- 60分(この値は
/etc/.java/.systemPrefs/outsystems/prefs.xml
ファイルで設定できます)。
PaaSインフラの場合は、「Factory構成」を使用してセッションタイムアウトを設定します。
コンシューマおよびプロデューサシナリオでのセッション
参照されているモジュールからアクションを使用する場合、すべてのProducerモジュールのセッション変数を持つセッションが作成されます。これにより、参照されているアクションがセッション変数の状態を複数の呼び出しの間で維持できるようになります。
セッション変数
セッション変数には、セッション中に保持されるデータが格納され、エンドユーザーのインタラクション中に情報を保存しておくために使用できます。各アプリケーションには自動的に作成される複数のセッション変数がありますが、新しい変数を定義することもできます。
セッション変数は、Platform Serverのセッションが作成されたときにService Studioによって自動的に作成されます。セッションが存在している間は、ビジネスロジックでセッション変数を使用できます。セッションが終了すると、セッション変数はデフォルト値に設定されます。
非同期ロジックのセッション変数
メール送信、タイマー実行、プロセス実行、およびWebサービスなどの非同期ロジックは異なるセッションで実行されます。つまり、ロジック実行時には、すべてのセッション変数にデフォルト値が設定されていることになります。
事前定義済みセッション変数
以下のセッション変数は、OutSystemsによって自動的に作成されます。これらの変数は読み取り専用で、アプリケーションのロジックで使用できます。
- Username
- リクエストを行うエンドユーザーのユーザー名です。この変数は、ログインが明示的か暗黙的かにかかわらず、ログイン操作中にインスタンス化されます。ログアウトの際には、このセッション変数には空のテキスト値が割り当てられます。
- TerminalType
- リクエストを行う際に使用される端末のタイプを示しています。使用可能な値: WebまたはSMS。これらの値は、セッション開始時にインスタンス化されます。
- MobilePhone
- SMSフローでは、この変数は電話番号の値です。Webフローでもこの変数を使用できますが、値は空です。
ユーザー定義セッション変数
[Data]タブのSession Variablesフォルダで独自のセッション変数を定義することができます。
セッション変数は、アプリケーションの拡張性に影響を与えることがあるため、注意して使用する必要があります。各リクエストでは、セッション変数をデータベースから取り出し、リクエストの終了時にデータベースを更新しなければならないため、セッション変数を持つデータを大量に保存することは避ける必要があります。アプリケーションのパフォーマンスと拡張性を損なう状況をService Studioが検出した場合は、警告メッセージが表示されます。
エンドユーザーがLogin、LoginPassword、Logoutアクションを使用してログインまたはログアウトすると、ユーザー定義セッション変数はデフォルト値に設定されます。