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)" の自動セッション管理を使用する:
![](../../picture/862144/pict862144.en.png)
これを使用した場合、設定はストラクチャーに保存され永続化されます。 - 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データベースメソッドのコードです:
C_TEXT(www_SessionID)
If(www_SessionID=WEB Get Current Session ID)
...
Else
www_SessionID:=WEB Get Current Session ID
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 データベースメソッドのコードです :
C_TEXT(www_SessionID)
www_SessionID:=""
QUERY([prefs];[prefs]Login=www_Login)
ARRAY TO SELECTION(prefNames;[prefs]name;prefValues;[prefs]value)
4Dの自動セッション管理メカニズムはcookieを利用しています。Webクライアントがcookieをサポートしない、あるいは拒否している場合、4D HTTPサーバーはセッションを保守できません。この場合各リクエストは新規接続として扱われ、各接続毎に Compiler_Web メソッドが実行されます。
4D HTTPサーバーはセッションを開始したIPアドレスを記憶します。異なるIPアドレスから既存のセッションにアクセスされた場合、HTTP 400エラーがクライアントに返されます。