このページでは変換された4D データベースで利用可能な旧式のWebセッションについて説明しています。( を参照してください)。
4D v18 R6 以降、スケーラブルWebセッション実装を使用することが推奨されています。変換されたアプリケーションにおいても、アプリケーション設定、webServer.start( ) ファンクションまたはWEB SET OPTION コマンドにおいて適切なオプションを選択することでスケーラブルセッションを有効化することが可能です。
スケーラブルWebセッションについての包括的なドキュメンテーションは、developer.4d.com のユーザーセッション にあります。
4D Webサーバーはユーザーセッションを容易に管理するメカニズムを提供します。この自動メカニズムを使用して、後のリクエストでWebクライアントが同じコンテキスト (セレクションや変数の値) を再利用できます。
このメカニズムでは4Dが自動で設定するプライベートな"4DSID"という名前のcookieを使用します (cookie名は変更できます)。Webクライアントからリクエストを受信するたびに4Dは4DSID cookieが送信されてきたか、またその値をチェックします:
- cookieの値がリクエストヘッダーに含まれていれば、4Dは存在するWebプロセスの中から対応するプロセスを検索します。
- プロセスが見つかれば、そのプロセスがWebリクエストの処理に使用されます。Compiler_Web メソッドは実行されません。
- プロセスが見つからない場合、4Dは新しいプロセスを作成します。
- cookieがリクエストヘッダーに含まれていなければ、4Dは新しいコンテキストを作成します。
旧式Web セッションは変換されたデータベースにおいて以下の手段を用いることで有効化されます:
- ストラクチャー設定の"オプション(I)"ページにて旧式セッションオプションが選択されている(恒常的な設定):
- WEB SET OPTION(Web legacy session;1) 宣言が実行された。
ただし可及的速やかにスケーラブルセッション オプションが有効化されることが推奨されます。
cookieの有効期限およびセッションに割り当てられたWebプロセスのタイムアウトはデフォルトで480分 (8時間) です。これらの有効期限やタイムアウトはWEB SET OPTIONコマンドを使用して個別に変更できます。cookieの有効期限は Web Inactive session timeout オプション、Webプロセスのタイムアウトは Web Inactive process timeout オプションで設定します。例えばブラウザー側でショッピングカート用のcookie有効期限を24時間有効にするとしても、最適化の目的でWebプロセス をそんなに長く保持したくないと思うでしょう。この場合、Webプロセスのタイムアウトをもっと短く設定することができます。Webプロセスがタイムアウ トするときはOn Web Close Process データベースメソッドが呼び出され、プロセスが破棄される前にセレクションや変数の値などを後で利用するために退避させることができます。次回Webク ライアントが (24時間以内に) 接続してきたときは、同じcookieがサーバーに送信されるので、そのcookie値をキーとして前回のセッションのコンテキスト (変数値やセレクションの状態など) を QR SET DESTINATION 内に読み込むことができます (後述の例題参照)。
必要であれば、 WEB LEGACY CLOSE SESSIONコマンドを使用していつでもcookieを強制的に失効させ、セッションを閉じることができます。
4Dはセッションを管理するWebプロセス数が上限値に達した場合、もっとも古いプロセスを破棄します。この上限値はデフォルトで100であり、WEB SET OPTIONコマンドの Web Max sessions オプションで変更できます。
プロセスが破棄される直前にはOn Web Close Process データベースメソッドが呼び出されるので、変数やセレクションなどを次回のリクエストで再利用できるよう退避させることができます。
この例題ではQR SET DESTINATIONやOn Web Close Process データベースメソッドを使用してセッションを管理する方法を示します。
以下はQR SET DESTINATIONのコードです:
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 Close Process データベースメソッドのコードです :
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エラーがクライアントに返されます。