ここは旧式の4DドキュメントWebサイトです。最新のアップデートされたドキュメントを読むには新サイトをご利用下さい→ developer.4d.com

ホーム

 
4D v20 R7
Webセッション管理(旧式)

Webセッション管理(旧式)  


 

このページでは変換された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 DESTINATIONOn Web Close Process データベースメソッドを使用してセッションを管理する方法を示します。

以下はQR SET DESTINATIONのコードです:

  // 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 Close Process データベースメソッドのコードです :

  // 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エラーがクライアントに返されます。



参照 

_O_WEB Get session process count
On Web Close Process データベースメソッド
On Web Legacy Close Session database method
WEB Get Current Session ID
WEB LEGACY CLOSE SESSION
WEB LEGACY GET SESSION EXPIRATION

 
プロパティ 

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

 
ページの目次 
 
履歴 

変更: 4D v18 R6

 
ARTICLE USAGE

ランゲージリファレンス ( 4D v20 R7)