メインコンテンツまでスキップ
バージョン: 開発中

Session

Session オブジェクトは Session コマンドによって返されます。 このオブジェクトは、カレントユーザーセッションを管理するためのインターフェースをデベロッパーに対して提供し、コンテキストデータの保存、プロセス間の情報共有、セッションに関連したプリエンプティブプロセスの開始などのアクションの実行や、アクセス権 の管理を可能にします。

セッションの種類

The following types of sessions are supported by this class:

Session オブジェクトにおいて利用可能なプロパティと関数は、セッションの種類に依存します。

概要

.clearPrivileges() : Boolean
対象セッションに紐づいているアクセス権をすべて削除し、実行が成功した場合に true を返します。
.expirationDate : Text
セッションcookie の有効期限
.getPrivileges() : Collection
対象セッションに紐づいている全アクセス権の名称のコレクションを返します
.hasPrivilege( privilege : Text ) : Boolean
対象セッションに privilege のアクセス権が紐づいていれば true、でなければ false を返します
.id : Text
the unique identifier (UUID) of the user session
.idleTimeout : Integer
対象セッションが 4D によって終了されるまでの、非アクティブタイムアウト時間 (分単位)
.info : Object
describes the remote client or stored procedure session on the server, or the standalone session
.isGuest() : Boolean
アクセス権のないゲストセッションの場合は true を返します
.setPrivileges( privilege : Text ) : Boolean
.setPrivileges( privileges : Collection )
.setPrivileges( settings : Object ) : Boolean

引数として渡したアクセス権やロールをセッションと紐づけ、実行が成功した場合に true を返します
.storage : Object
セッションのすべてのプロセスで利用可能な情報を保存しておける共有オブジェクトを格納します
.userName : Text
セッションと紐づいたユーザー名

.clearPrivileges()

履歴
リリース内容
18 R6追加

.clearPrivileges() : Boolean

引数説明
戻り値Boolean<-実行が正常に終わった場合には true

説明

This function does nothing and always returns True with remote client, stored procedure, and standalone sessions.

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

例題

// Webユーザーセッションを無効にします
var $isGuest : Boolean
var $isOK : Boolean

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

.expirationDate

履歴
リリース内容
18 R6追加

.expirationDate : Text

説明

このプロパティは、Webユーザーセッションの場合にのみ使用できます。

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

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

例題

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

.getPrivileges()

履歴
リリース内容
20 R6追加

.getPrivileges() : Collection

引数説明
戻り値Collection<-アクセス権の名称 (文字列) のコレクション

説明

.getPrivileges() 関数は、対象セッションに紐づいている全アクセス権の名称のコレクションを返します。

With remote client, stored procedure and standalone sessions, this function returns a collection only containing "WebAdmin".

info

権限は、setPrivileges() 関数によって、セッションに割り当てられます。

例題

以下の roles.json が定義されています:

{
"privileges":[
{
"privilege":"simple",
"includes":[

]
},
{
"privilege":"medium",
"includes":[
"simple"
]
}
],
"roles":[
{
"role":"Medium",
"privileges":[
"medium"
]
}
],
"permissions":{
"allowed":[

]
}
}

セッションのロールは、DaraStore クラスの authentify() 関数内で割り当てられます:

  // DataStore クラス

exposed Function authentify($role : Text) : Text
Session.clearPrivileges()
Session.setPrivileges({roles: $role})

"medium" ロールを指定して authentify() 関数が呼び出された場合:

var $privileges : Collection
$privileges := Session.getPrivileges()
// $privileges: ["simple","medium"]

参照

.setPrivileges()
ブログ記事: セッション権限を検査してデバッグを容易に

.hasPrivilege()

履歴
リリース内容
18 R6追加

.hasPrivilege( privilege : Text ) : Boolean

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

説明

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

With remote client, stored procedure and standalone sessions, this function always returns True, whatever the privilege.

例題

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

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

.id

履歴
リリース内容
20 R5追加

.id : Text

説明

The .id property contains the unique identifier (UUID) of the user session. With 4D Server, this unique string is automatically assigned by the server for each session and allows you to identify its processes.

tip

You can use this property to get the .storage object of a session thanks to the Session storage command.

.idleTimeout

履歴
リリース内容

|18 R6|追加|

.idleTimeout : Integer

説明

このプロパティは、Webユーザーセッションの場合にのみ使用できます。

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

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

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

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

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

例題

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

.info

履歴
リリース内容
20 R5追加

.info : Object

説明

This property is only available with remote client, stored procedure, and standalone sessions.

The .info property describes the remote client or stored procedure session on the server, or the standalone session.

  • The .info object is the same object as the one returned in the "session" property by the Process activity command for remote client and stored procedure sessions.
  • The .info object is the same object as the one returned by the Session info command for a standalone session.

.info オブジェクトには、次のプロパティが格納されています:

プロパティ説明
typeTextSession type: "remote", "storedProcedure", "standalone"
userNameText4Dユーザー名 (.userName と同じ値)
machineNameTextリモートセッション: リモートマシンの名前。 Stored procedures session: name of the server machine. Standalone session: name of the machine
systemUserNameTextリモートセッション: リモートマシン上で開かれたシステムセッションの名前。
IPAddressTextリモートマシンの IPアドレス。
hostTypeTextホストタイプ: "windows" または "mac"
creationDateTime日付 (ISO 8601)Date and time of session creation. Standalone session: date and time of application startup
stateTextセッションの状態: "active", "postponed", "sleeping"
IDTextセッションUUID (.id と同じ値))
persistentIDTextリモートセッション: セッションの永続的な ID

.info は計算プロパティなため、そのプロパティに対して何らかの処理をおこないたい場合は、呼び出し後にローカル変数に保存することが推奨されます。

.isGuest()

履歴
リリース内容
18 R6追加

.isGuest() : Boolean

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

説明

This function always returns False with remote client, stored procedure, and standalone sessions.

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

例題

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

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

.setPrivileges()

履歴
リリース内容
19 R8roles プロパティをサポート
18 R6追加

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

引数説明
privilegeText->アクセス権の名称
privilegesCollection->アクセス権の名称のコレクション
settingsObject->"privileges" プロパティ (文字列またはコレクション) を持つオブジェクト
戻り値Boolean<-実行が正常に終わった場合には true

説明

This function does nothing and always returns False with remote client, stored procedure, and standalone sessions.

.setPrivileges() 関数は、引数として渡したアクセス権やロールをセッションと紐づけ、実行が成功した場合に true を返します。

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

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

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

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

    権限とロールは、プロジェクトの roles.json ファイルで定義されます。 詳細については、権限 を参照してください。

    privileges または roles プロパティに、roles.json ファイルで宣言されていない名前が含まれている場合、その名前は無視されます。

    セッションにアクセス権またはロールが紐づいていない場合、そのセッションはデフォルトで ゲストセッション です。

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

    例題

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

    var $userOK : Boolean

    ... // ユーザー認証

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

    参照

    .getPrivileges()

    .storage

    履歴
    リリース内容
    20 R5リモートクライアントとストアドプロシージャーセッションをサポート
    18 R6追加

    .storage : Object

    説明

    .storage プロパティは、セッションのすべてのプロセスで利用可能な情報を保存しておける共有オブジェクトを格納します。

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

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

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

    tip

    You can get the .storage property of a session using the Session storage command.

    Webセッションの例題

    クライアントの 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

    リモートセッションの例題

    同じセッションのプロセス間でデータを共有したい場合:

    Use (Session.storage)
    Session.storage.settings:=New shared object("property"; $value; "property2"; $value2)
    End use

    .userName

    履歴
    リリース内容
    20 R5リモートクライアントとストアドプロシージャーセッションをサポート
    18 R6追加

    .userName : Text

    説明

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

    • Webセッションでは、このプロパティはデフォルトで空の文字列です。 これは、setPrivileges() 関数の privileges プロパティを使って設定することができます。
    • リモートおよびストアドプロシージャーセッションでは、このプロパティは Current user コマンドと同じユーザー名を返します。
    • With standalone sessions, this property contains "designer" or the name set with the SET USER ALIAS command.

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