メインコンテンツまでスキップ
バージョン: v19 R8 BETA

Session

プロジェクトにおいて、スケーラブルセッションが有効化されている 場合、Session コマンドによって Session オブジェクトが返されます。 Webクライアント (ブラウザーなど) のセッションを制御するため、4D Webサーバーは自動的に Sessionオブジェクトを作成・管理します。 このオブジェクトは、ユーザーセッションへのインターフェースを Web開発者に対して提供し、アクセス権の管理や、コンテキストデータの保存、プロセス間の情報共有、セッションに関連したプリエンプティブプロセスの開始などを可能にします。

セッションの実装に関する詳細については、Webサーバーセッション の章を参照ください。

概要

.clearPrivileges()    対象セッションに紐づいているアクセス権をすべて削除します
.expirationDate : Text    セッションcookie の有効期限を返します
.hasPrivilege( privilege : Text ) : Boolean    対象セッションに privilege のアクセス権が紐づいていれば true、でなければ false を返します
.idleTimeout : Integer    対象セッションが 4D によって終了されるまでの、非アクティブタイムアウト時間 (分単位) を格納します
.isGuest() : Boolean    アクセス権のないゲストセッションの場合は true を返します
.setPrivileges( privilege : Text )
.setPrivileges( privileges : Collection )
.setPrivileges( settings : Object )
    引数として渡したアクセス権やロールをセッションと紐づけます
.storage : Object    Webクライアントのリクエストに対応するために情報を保存しておける共有オブジェクトを格納します
.userName : Text    セッションと紐づいたユーザー名を格納します

Session

履歴
バージョン内容
v18 R6追加

Session : 4D.Session

引数タイプ説明
戻り値4D.Session<-Session オブジェクト

|

説明

Session コマンドは、 カレントのスケーラブルユーザーWebセッションに対応する Session オブジェクトを返します。

スケーラブルセッションが有効化されている 場合にのみ、このコマンドは機能します。 セッションが無効な場合や、旧式セッションが使用されている場合には、Null を返します。

スケーラブルセッションが有効化されている場合、Session オブジェクトは次のコンテキストにおける、あらゆる Webプロセスから利用可能です:

  • On Web AuthenticationOn Web Connection、および On REST Authentication データベースメソッド
  • モバイルリクエスト用の On Mobile App AuthenticationOn Mobile App Action データベースメソッド
  • RESTリクエストで呼び出された ORDA データモデルクラス関数
  • セミダイナミックページにおいて、4Dタグ (4DTEXT, 4DHTML, 4DEVAL, 4DSCRIPT/, 4DCODE) を介して処理されるコード
  • "公開オプション: 4DタグとURL(4DACTION...)" を有効化されたうえで、4DACTION/ URL から呼び出されたプロジェクトメソッド

例題

"公開オプション: 4DタグとURL(4DACTION...)" を有効にした action_Session メソッドを定義しました。 ブラウザーに次の URL を入力してメソッドを呼び出します:

IP:port/4DACTION/action_Session
  //action_Session メソッド
Case of
:(Session#Null)
If(Session.hasPrivilege("WebAdmin")) // hasPrivilege 関数を呼び出します
WEB SEND TEXT("4DACTION --> セッションは WebAdmin です")
Else
WEB SEND TEXT("4DACTION --> セッションは WebAdmin ではありません")
End if
Else
WEB SEND TEXT("4DACTION --> セッションは null です")
End case

.clearPrivileges()

履歴
バージョン内容
v18 R6追加

.clearPrivileges()

引数タイプ説明
このコマンドは引数を必要としません

|

説明

.clearPrivileges() 関数は、 対象セッションに紐づいているアクセス権をすべて削除します。 結果的に、当該セッションは自動的にゲストセッションになります。

例題

// セッションを無効にします
var $isGuest : Boolean

Session.clearPrivileges()
$isGuest:=Session.isGuest() //$isGuest は true

.expirationDate

履歴
バージョン内容
v18 R6追加

.expirationDate : Text

説明

.expirationDate プロパティは、 セッションcookie の有効期限を返します。 値は ISO 8601標準に従って文字列で表現されます: YYYY-MM-DDTHH:MM:SS.mmmZ

このプロパティは 読み取り専用 です。 .idleTimeout プロパティ値が変更された場合、有効期限は自動的に再計算されます。

例題

var $expiration : Text
$expiration:=Session.expirationDate // 例: "2021-11-05T17:10:42Z"

.hasPrivilege()

履歴
バージョン内容
v18 R6追加

.hasPrivilege( privilege : Text ) : Boolean

引数タイプ説明
privilegeText<-確認するアクセス権の名称
戻り値Boolean<-セッションが privilege のアクセス権を持っていれば true、それ以外は false

|

説明

.hasPrivilege() 関数は、 対象セッションに privilege のアクセス権が紐づいていれば true、でなければ false を返します。

例題

"WebAdmin" アクセス権がセッションに紐づいているかを確認します:

If (Session.hasPrivilege("WebAdmin"))
// アクセス権が付与されているので、何もしません
Else
// 認証ページを表示します

End if

.idleTimeout

履歴
バージョン内容
v18 R6追加

.idleTimeout : Integer

説明

.idleTimeout プロパティは、 対象セッションが 4D によって終了されるまでの、非アクティブタイムアウト時間 (分単位) を格納します。

プロパティ未設定時のデフォルト値は 60 (1時間) です。

このプロパティが設定されると、それに応じて .expirationDate プロパティも更新されます。

60 (分) 未満の値を指定することはできません (60 未満の値を設定した場合、タイムアウトは 60 (分) に設定されます)。

このプロパティは 読み書き可能 です。

例題

If (Session.isGuest())
// ゲストセッションは、60分の非アクティブ時間経過後に終了します
Session.idleTimeout:=60
Else
// その他のセッションは、120分の非アクティブ時間経過後に終了します
Session.idleTimeout:=120
End if

.isGuest()

履歴
バージョン内容
v18 R6追加

.isGuest() : Boolean

引数タイプ説明
戻り値Boolean<-ゲストセッションの場合は true、それ以外は false

|

説明

.isGuest() 関数は、 アクセス権のないゲストセッションの場合は true を返します。

例題

On Web Connection データベースメソッドにて:

If (Session.isGuest())
// ゲストユーザー用の処理
End if

.setPrivileges()

履歴
バージョン内容
v19 R8Support of "roles" Settings property
v18 R6追加

.setPrivileges( privilege : Text )
.setPrivileges( privileges : Collection )
.setPrivileges( settings : Object )

引数タイプ説明
privilegeText->アクセス権の名称
privilegesCollection->アクセス権の名称のコレクション
settingsObject->"privileges" プロパティ (文字列またはコレクション) を持つオブジェクト

|

説明

.setPrivileges() 関数は、 引数として渡したアクセス権やロールをセッションと紐づけます。

  • privilege には、アクセス権の名称を文字列として渡します (複数の場合はカンマ区切り)。

  • privileges には、アクセス権の名称を文字列のコレクションとして渡します。

  • settings には、以下のプロパティを持つオブジェクトを渡します:

プロパティタイプ説明
privilegesText または Collection
  • アクセス権名の文字列
  • アクセス権名のコレクション
  • rolesText または Collection
  • ロールの文字列
  • ロールの文字列のコレクション
  • userNameText(任意) セッションと紐づけるユーザー名
    info

    Privileges and roles are defined in roles.json file of the project. For more information, please refer to the Privileges section.

    If the privileges or roles property contains a name that is not declared in the roles.json file, it is ignored.

    By default when no privilege or role is associated to the session, the session is a Guest session.

    userName プロパティは Session オブジェクトレベルで利用可能です (読み取り専用)。

    例題

    カスタムな認証メソッドにおいて、ユーザーに "WebAdmin" アクセス権を付与します:

    var $userOK : Boolean

    ... // ユーザー認証

    If ($userOK) // ユーザー認証に成功した場合
    var $info : Object
    $info:=New object()
    $info.privileges:=New collection("WebAdmin")
    Session.setPrivileges($info)
    End if

    .storage

    履歴
    バージョン内容
    v18 R6追加

    .storage : Object

    説明

    .storage プロパティは、 Webクライアントのリクエストに対応するために情報を保存しておける共有オブジェクトを格納します。

    Session オブジェクトの作成時には、.storage プロパティは空です。 共有オブジェクトのため、このプロパティはサーバー上の Storage オブジェクトにおいて利用可能です。

    サーバーの Storage オブジェクトと同様に、.storage プロパティは常に "single" で存在します。 共有オブジェクトや共有コレクションを .storage に追加しても、共有グループは作成されません。

    このプロパティは 読み取り専用 ですが、戻り値のオブジェクトは読み書き可能です。

    例題

    クライアントの IP を .storage プロパティに保存します。 On Web Authentication データベースメソッドに以下のように書けます:

    If (Session.storage.clientIP=Null) // 最初のアクセス
    Use (Session.storage)
    Session.storage.clientIP:=New shared object("value"; $clientIP)
    End use
    End if

    .userName

    履歴
    バージョン内容
    v18 R6追加

    .userName : Text

    説明

    .userName プロパティは、 セッションと紐づいたユーザー名を格納します。 このプロパティは、コード内でユーザーを確認するのに使用できます。

    このプロパティはデフォルトでは空の文字列です。 これは、setPrivileges() 関数の privileges プロパティを使って設定することができます。

    このプロパティは 読み取り専用 です。