You are viewing an old version of this page. View the current version.

Compare with Current View Page History

Version 1 Next »

[ |../../index.htm#lansa/vlwebeng03_0075.htm]
現在地:

18.2 サーバー・ベースのセッション

サーバー側では、LANSA のサーバー・モジュールにより、ビルトインのセッション管理機能が提供されています。
次の例では、セッション開始時、サーバー・モジュールのタイムアウトが 900 秒に定義されています。セッションのアクティビティがない状態が 15 分になると、セッションを必要とするサーバー・ルーチンを次に使用しようとするとた時、エラーになります。
サーバー・モジュールで最初に呼び出されたサーバー・ルーチンは、通常サインオンのようなルーチンで、セッションを開始させ、セッション内で使用される必要な値を設定します。
Begin_Com Role(*EXTENDS #PRIM_SRVM)
Persist Fields(#SessionUserID #SessionPassword)
 
SrvRoutine Name(Signin) Field_Map For(*Input) Field(#User) Field_Map For(*Input) Fields(#Password) Field_Map For(*Output) Fields(#io$sts)   If (#Com_owner.VerifyUser( #User #Password ))   #Com_owner.StartSession Timeout(900) #io$sts := OK   * Store Persistent Data     #SessionUserID := #User #SessionPassword := #Password   Else   #io$sts := ER   Endif Endroutine
 
SrvRoutine Name(DoSomething) Session(Required) Field_Map For(*Input) Field(#User)   If (#User = #SessionUser)   process request Endif
  Endroutine
SrvRoutine Name(SignOut) Session(*required)
 
#com_owner.EndSession
 
Endroutine  
この Signin ルーチンには、黙示的な Session(*None) があり、ルーチンの実行にセッションが必要ないことを意味しています。ユーザー ID とパスワードはルーチンに渡され、有効であるという想定のもと、永続のフィールド (persitent) として、ソース内に定義された変数に格納されます。
検証が完了すると、StartSession メソッドを使ってセッションが作成されます。これは、EndSession を使っていつでも終了させることができます。
後続のルーチンにはすべて、Session(*Required) が付きます。セキュリティを強化するため、ユーザー ID を含めることも可能です。そして、これを永続のセッション・データと比較します。
 
SrvRoutine Name(DoSomething) Session(*Required) Field_Map For(*Input) Field(#User)   If (#User = #SessionUser)   Endif
  Endroutine  
SrvRoutine が実行されると、必要なセッション・データがサーバーに渡され、タイムアウトに達していないかが確認されます。タイムアウトの場合、Visual LANSA で Failed イベントが起動され、ステートフルなクライアント側がこれに反応して、サイオン画面が再度表示されます。注- 「Web アプリケーションの期限が切れました」のメッセージが表示されないようにするために、実際はこの応答を処理する必要があります。
 
Mthroutine Name(DoSomething) Session(*Required) Define_Com Class(#SessionServices.DoSomething) Name(#DoSomething)   #DoSomething.ExecuteAsync( #User )   Evtroutine Handling(#DoSomething.Completed)    #MyApplication.ShowDetails Endroutine   Evtroutine Handling(#DoSomething.Failed)
   #MyApplication.ShowSignon Endroutine   Endroutine
 
注:クラウドで実行時のタイムアウト・ポリシー負荷分散装置を使ってクラウドで実行する場合、自身のアプリケーション内の「スティッキー・ポリシー」のタイムアウトがどのセッション・タイムアウトよりも大きいことを確認することが重要です。 最大のセッション・タイムアウトが 900 秒であるとの前提で、スティッキー・ポリシー・タイムアウトの省略値は 930 秒になっています。最大セッション・タイムアウトがこれよりも大きい場合、負荷分散装置が次の要求を別のアプリ/Web サーバーに移動させる際にスティッキー・ポリシーの期限が切れてしまい、想定より早くタイムアウトするエラーが発生する可能性があります。逆に、負荷がより均等に分散されるよう、スティッキー・ポリシー・タイムアウトを出来る限り低く抑えるのがベストです。例えば、セッションの最大タイムアウトが 600 秒だった場合、負荷分散装置のスティッキー・タイムアウトを 630 に下げると良いでしょう。
[ |../../index.htm#lansa/vlwebeng03_0075.htm]

  • No labels