Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

WAMセッションを管理するためのSessionStatusプロパティを理解しておくことは重要です。

以下は、セッションを管理するWAMの典型的な例です。 FUNCTION OPTIONS(DIRECT)BEGIN_COM ROLE(*EXTENDS #PRIM_WAM) SESSIONSTATUS(Active) SESSIONTIMEOUT(300) *The following line declares Session state #CUSTNAME fieldWEB_MAP FOR(*NONE) FIELDS(#CUSTNAME) OPTIONS(*PERSIST) WEBROUTINE NAME(Start) DESC('Initial Page') OnEntry


     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の終了時にセッションが無効になります。