4D v14.3

Webセッション管理

ホーム

 
4D v14.3
Webセッション管理

Webセッション管理  


 

 

4D Webサーバーはユーザーセッションを容易に管理するメカニズムを提供します。この自動メカニズムを使用して、後のリクエストでWebクライアントが同じコンテキスト (セレクションや変数の値) を再利用できます。

このメカニズムでは4Dが自動で設定するプライベートな"4DSID"という名前のcookieを使用します (cookie名は変更できます)。Webクライアントからリクエストを受信するたびに4Dは4DSID cookieが送信されてきたか、またその値をチェックします:

  • cookieの値がリクエストヘッダーに含まれていれば、4Dは存在するWebプロセスの中から対応するプロセスを検索します。
    • プロセスが見つかれば、そのプロセスがWebリクエストの処理に使用されます。Compiler_Web メソッドは実行されません。
    • プロセスが見つからない場合、4Dは新しいプロセスを作成します。
  • cookieがリクエストヘッダーに含まれていなければ、4Dは新しいコンテキストを作成します。

アプリケーションで4Dの自動Webセッション管理を使用するには、その機能が有効化されていなければなりません。

4D v13以降で作成されたデータベースでは、このメカニズムがデフォルトで有効になっています。4D v12以前から変換されたデータベースの場合、互換性のためこの機能は無効になっています。この新機能を使用するためには明示的に有効化しなければなりません。

自動セッション管理を有効化する方法は2つあります:

  • データベース設定のWebページ、"オプション (I)" の自動セッション管理を使用する:

    これを使用した場合、設定はストラクチャーに保存され永続化されます。
  • WEB SET OPTIONコマンドでWeb Keep sessionオプションを使用する。この場合、設定は4Dを終了するまで有効です。

いずれの場合も設定はローカルマシンに有効です。つまり4D Serverとリモートモードの4Dでは異なる設定を行うことができます。

cookieの有効期限およびセッションに割り当てられたWebプロセスのタイムアウトはデフォルトで480分 (8時間) です。これらの有効期限やタイムアウトはWEB SET OPTIONコマンドを使用して個別に変更できます。cookieの有効期限は Web Inactive session timeout オプション、Webプロセスのタイムアウトは Web Inactive process timeout オプションで設定します。例えばブラウザー側でショッピングカート用のcookie有効期限を24時間有効にするとしても、最適化の目的でWebプロセス をそんなに長く保持したくないと思うでしょう。この場合、Webプロセスのタイムアウトをもっと短く設定することができます。Webプロセスがタイムアウ トするときはOn Web Session Suspend データベースメソッドが呼び出され、プロセスが破棄される前にセレクションや変数の値などを後で利用するために退避させることができます。次回Webク ライアントが (24時間以内に) 接続してきたときは、同じcookieがサーバーに送信されるので、そのcookie値をキーとして前回のセッションのコンテキスト (変数値やセレクションの状態など) を On Web Connectionデータベースメソッド 内に読み込むことができます (後述の例題参照)。

必要であれば、 WEB CLOSE SESSIONコマンドを使用していつでもcookieを強制的に失効させ、セッションを閉じることができます。

4Dはセッションを管理するWebプロセス数が上限値に達した場合、もっとも古いプロセスを破棄します。この上限値はデフォルトで100であり、WEB SET OPTIONコマンドの Web Max sessions オプションで変更できます。
プロセスが破棄される直前にはOn Web Session Suspend データベースメソッドが呼び出されるので、変数やセレクションなどを次回のリクエストで再利用できるよう退避させることができます。

例題  

この例題ではOn Web ConnectionデータベースメソッドOn Web Session Suspend データベースメソッドを使用してセッションを管理する方法を示します。

以下はOn Web Connectionデータベースメソッドのコードです:

  // On Web Connection (または On Web Authentication)
 C_TEXT(www_SessionID)
 If(www_SessionID=WEB Get Current Session ID)
  // Compiler_Webは呼び出されない
  // すべての変数やセレクションは既に存在している
    ...
 Else
  // Compiler_Web が実行された
  // これは新しいセッションで、変数やセレクションは存在しない
  // 4Dが作成したこのセッションのIDをプロセス変数に格納する
    www_SessionID:=WEB Get Current Session ID
 
  // Webプロセスの初期化を行う
  // セレクションを作成
  // ユーザーを検索
    QUERY([user];[user]Login=www_Login)
    QUERY([prefs];[prefs]Login=www_Login)
 
  // 従業員情報を検索
    QUERY([employees];[employees]Name=[user]name)
    QUERY([company];[company]Name=[user]company)
 
  // 変数のセットアップ
  // このユーザーの環境設定をロード
    SELECTION TO ARRAY([prefs]name;prefNames;[prefs]value;prefValues)
    www_UserName:=[User]Name
    www_UserMail:=[User]mail
 
  // セッションが初期化された
 End if

以下はOn Web Session Suspend データベースメソッドのコードです :

  // On Web Session Suspend
  // タイムアウトその他の理由で4Dはセッションを閉じることがある
 C_TEXT(www_SessionID)
 www_SessionID:=""
  // セッション情報を永続化する
  // このプロセスを使用して接続していたユーザーの環境設定を保存
 QUERY([prefs];[prefs]Login=www_Login) // 変数値はまだ使用できる
 ARRAY TO SELECTION(prefNames;[prefs]name;prefValues;[prefs]value)
 
  // 重要: 4Dはプロセスを終了します
  // 変数やセレクションなどは破棄されます。

4Dの自動セッション管理メカニズムはcookieを利用しています。Webクライアントがcookieをサポートしない、あるいは拒否している場合、4D HTTPサーバーはセッションを保守できません。この場合各リクエストは新規接続として扱われ、各接続毎に Compiler_Web メソッドが実行されます。

4D HTTPサーバーはセッションを開始したIPアドレスを記憶します。異なるIPアドレスから既存のセッションにアクセスされた場合、HTTP 400エラーがクライアントに返されます。

 
プロパティ 

プロダクト: 4D
テーマ: Webサーバ

 
参照 

On Web Session Suspend データベースメソッド
On Web Session Suspend データベースメソッド
WEB CLOSE SESSION
WEB Get Current Session ID
WEB GET SESSION EXPIRATION

 
ARTICLE USAGE

ランゲージリファレンス ( 4D v14 R2)
ランゲージリファレンス ( 4D v14 R3)
ランゲージリファレンス ( 4D v13.5)
ランゲージリファレンス ( 4D v14.3)
ランゲージリファレンス ( 4D v14 R4)