4.3.7 WAMセッションの例
WAMセッションを管理するためのSessionStatusプロパティを理解しておくことは重要です。
以下は、セッションを管理するWAMの典型的な例です。
FUNCTION OPTIONS(*DIRECT)
BEGIN_COM ROLE(*EXTENDS #PRIM_WAM) SESSIONSTATUS(Active) SESSIONTIMEOUT(300)
*The following line declares Session state #CUSTNAME field
WEB_MAP FOR(*NONE) FIELDS(#CUSTNAME) OPTIONS(*PERSIST)
WEBROUTINE NAME(Start) DESC('Initial Page') OnEntry(*SessionStatus_None)
WEB_MAP FOR(*OUTPUT) FIELDS(#USERID #PASSWORD)
ENDROUTINE
WEBROUTINE NAME(Logon) DESC('Logon Page') OnEntry(*SessionStatus_None)
WEB_MAP FOR(*INPUT) FIELDS(#USERID #PASSWORD)
…
* Some authentication logic, if authentication fails can TRANSFER back to Start page
* The following line will create a session, when WEBROUTINE exits
#COM_SELF.SessionStatus := Active
TRANSFER TOROUTINE(WelcomePage)
ENDROUTINE
WEBROUTINE NAME(WelcomePage) DESC('Welcome Page')
ENDROUTINE
WEBROUTINE NAME(Logoff) DESC('Logoff page')
#COM_SELF.SessionStatus := Invalid
ENDROUTINE
* The following event handler will handle invalid sessions and
* TRANSFER back to starting page, for logon
EVTROUTINE HANDLING(#COM_OWNER.SessionInvalid) OPTIONS(*NOCLEARMESSAGES *NOCLEARERRORS)
TRANSFER TOROUTINE(Start)
ENDROUTINE
END_COM
- SessionStatusは、Activeに設定されています。デフォルトでは、このWAMの中にあるすべてのWEBROUTINEの実行前に、セッションが有効になっている必要があります。SessionTimeoutは、5分です。
- 2つのWEBROUTINE (StartとLogon)では、OnEntry(*SessionStatus_None)キーワードによって、SessionStatusがNoneに上書きされています。Start WEBROUTINEは、ログオンの詳細情報を入力するためのページを表示します。これは最初のページなので、有効なセッションがあってもなくても実行する必要があります。したがって、SessionStatusをNoneにします。
- Logon WEBROUTINEは、Startページでログオン・ボタンがクリックされたときに呼び出されます。その時点では、まだ有効なセッションが存在しないので、このWEBROUTINEについても、セッションなしで実行できるように設定する必要があります。
- Logonは、ユーザーIDとパスワードの検証を行い、それらが有効な場合は、SessionStatusをActiveに設定します。SessionStatusをNoneからActiveに設定するので、Logon WEBROUTINEが終了すると、新しいセッションが作成されます。
- Logon WEBROUTINEは、WelcomPage WEBROUTINEへのTRANSFERを実行します。この時点ではアクティブなセッションがあるので、(アクティブなセッションを必要とする)WelcomePageの実行が可能になります。WelcomePageが終了すると、新しいセッションのセッション・キーがブラウザーに送り返されます。これ以降、同じブラウザーから新しいWEBROUTINE要求が出されるたびに、そのセッション・キーがサーバーに送られ、サーバーがセッションを識別できるようになります。
- StartページへのTRANSFERを実行するだけのSessionInvalidハンドラーもあります。このハンドラーが呼び出されるのは、セッション・キーが存在しないか無効な状態、またはセッション・キーは有効でもセッションの有効期限が切れた状態(つまり、要求が出されない時間が5分を超えた状態)でWEBROUTINEを呼び出そうとしたときです。セッションが無効または有効期限切れの場合は、ユーザーIDとパスワードを入力するためのStartページが必ずブラウザーに表示されます。
- 確実にセッションを無効にするためのログアウト・ボタンやメニューをWAMアプリケーションで用意することもできます。その場合は、Logoff WEBROUTINEが呼び出され、SessionStatusがInvalidに設定され、WEBROUTINEの終了時にセッションが無効になります。