Session
Session objects are returned by the Session
command. このオブジェクトは、カレントユーザーセッションを管理するためのインターフェースをデベロッパーに対して提供し、コンテキストデータの保存、プロセス間の情報共有、セッションに関連したプリエンプティブプロセスの開始などのアクションの実行や、アクセス権 の管理を可能にします。
セッションの種類
このクラスは 3種類のセッションをサポートしています:
- Webユーザーセッション: プロジェクトにおいてスケーラブルセッションが有効化されている 場合、Webユーザーセッションが利用可能です。 これらは Web および REST 接続に使用され、権限を割り当てることができます。
- リモートクライアントユーザー セッション: クライアント/サーバーアプリケーションでは、リモートユーザーは、サーバー上で管理される独自のセッションを持ちます。
- ストアドプロシージャーセッション: サーバ上で実行されるすべてのストアドプロシージャーは、同じ仮想ユーザーセッションを共有します。
Session
オブジェクトにおいて利用可能なプロパティと関数は、セッションの種類に依存します。
概要
.clearPrivileges() : Boolean 対象セッションに紐づいているアクセス権をすべて削除し、実行が成功した場合に true を返します。 |
.expirationDate : Text セッションcookie の有効期限 |
.getPrivileges() : Collection 対象セッションに紐づいている全アクセス権の名称のコレクションを返します |
.hasPrivilege( privilege : Text ) : Boolean 対象セッションに privilege のアクセス権が紐づいていれば true、でなければ false を返します |
.id : Text サーバー上のセッションの一意な識別子 (UUID) を格納します |
.idleTimeout : Integer 対象セッションが 4D によって終了されるまでの、非アクティブタイムアウト時間 (分単位) |
.info : Object サーバー上のリモートクライアントまたはストアドプロシージャーセッションの情報を格納します |
.isGuest() : Boolean アクセス権のないゲストセッションの場合は true を返します |
.setPrivileges( privilege : Text ) : Boolean .setPrivileges( privileges : Collection ) .setPrivileges( settings : Object ) : Boolean 引数として渡したアクセス権やロールをセッションと紐づけ、実行が成功した場合に true を返します |
.storage : Object セッションのすべてのプロセスで利用可能な情報を保存しておける共有オブジェクトを格納します |
.userName : Text セッションと紐づいたユーザー名 |
.clearPrivileges()
履歴
リリース | 内容 |
---|---|
18 R6 | 追加 |
.clearPrivileges() : Boolean
引数 | 型 | 説明 | |
---|---|---|---|
戻り値 | ブール | <- | 実行が正常に終わった場合には true |
説明
この関数は、リモートクライアントとストアドプロシージャーのセッションでは何もせず、常に false を返します。
.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
引数 | 型 | 説明 | |
---|---|---|---|
戻り値 | コレクション | <- | アクセス権の名称 (文字列) のコレクション |
説明
.getPrivileges()
関数は、対象セッションに紐づいている全アクセス権の名称のコレクションを返します。
リモートクライアントおよびストアドプロシージャーセッションでは、この関数は "WebAdmin" のみを含むコレクションを返します。
権限は、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
引数 | 型 | 説明 | |
---|---|---|---|
privilege | テキスト | -> | 確認するアクセス権の名称 |
戻り値 | ブール | <- | セッションが privilege のアクセス権を持っていれば true、それ以外は false |
説明
.hasPrivilege()
関数は、対象セッションに privilege のアクセス権が紐づいていれば true、でなければ false を返します。
リモートクライアントとストアドプロシージャーセッションでは、この関数は privilege に関係なく、常に True を返します。
例題
"WebAdmin" アクセス権が Webユーザーセッションに紐づいているかを確認します:
If (Session.hasPrivilege("WebAdmin"))
// アクセス権が付与されているので、何もしません
Else
// 認証ページを表示します
End if
.id
履歴
リリース | 内容 |
---|---|
20 R5 | 追加 |
.id : Text
説明
.id
プロパティは、サーバー上のセッションの一意な識別子 (UUID) を格納します。 この一意の文字列は、サーバーによって各セッションに対して自動的に割り当てられ、そのプロセスを識別することを可能 にします。
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
説明
このプロパティは、リモートクライアントおよびストアドプロシージャーセッションの場合にのみ使用できます。
.info
プロパティは、サーバー上のリモートクライアントまたはストアドプロシージャーセッションの情報を格納します。
.info
オブジェクトは、リモートクライアントおよびストアドプロシージャーセッションに対して Get process activity
コマンドによって返されるオブジェクトと同じです。
.info
オブジェクトには、次のプロパティが格納されています:
プロパ ティ | 型 | 説明 |
---|---|---|
type | テキスト | セッションタイプ: "remote" または "storedProcedure" |
userName | テキスト | 4Dユーザー名 (.userName と同じ値) |
machineName | テキスト | リモートセッション: リモートマシンの名前。 ストアドプロシージャーセッション: サーバーマシンの名前 |
systemUserName | テキスト | リモートセッション: リモートマシン上で開かれたシステムセッションの名前。 |
IPAddress | テキスト | リモートマシンの IPアドレス。 |
hostType | テキスト | ホストタイプ: "windows" または "mac" |
creationDateTime | 日付 (ISO 8601) | セッション作成の日時 |
state | テキスト | セッションの状態: "active", "postponed", "sleeping" |
ID | テキスト | セッションUUID (.id と同じ値)) |
persistentID | テキスト | セッションの永続的な ID |
.info
は計算プロパティなため、そのプロパティに対して何らかの処理をおこないたい場合は、呼び出し後にローカル変数に保存することが推奨されます。
.isGuest()
履歴
リリース | 内容 |
---|---|
18 R6 | 追加 |
.isGuest() : Boolean
引数 | 型 | 説明 | |
---|---|---|---|
戻り値 | ブール | <- | ゲストセッションの場合は true、それ以外は false |
説明
この関数は、リモートクライアントとストアドプロシージャーのセッションでは常に false を返します。
.isGuest()
関数は、アクセス権のないゲストセッションの場合は true を返します。
例題
On Web Connection
データベースメソッドにて:
If (Session.isGuest())
// ゲストユーザー用の処理
End if
.setPrivileges()
履歴
リリース | 内容 |
---|---|
19 R8 | roles プロパティをサポート |
18 R6 | 追加 |
.setPrivileges( privilege : Text ) : Boolean
.setPrivileges( privileges : Collection )
.setPrivileges( settings : Object ) : Boolean
引数 | 型 | 説明 | |
---|---|---|---|
privilege | テキスト | -> | アクセス権の名称 |
privileges | コレクション | -> | アクセス権の名称のコレクション |
settings | オブジェクト | -> | "privileges" プロパティ (文字列またはコレクション) を持つオブジェクト |
戻り値 | ブール | <- | 実行が正常に終わった場合には true |
説明
この関数は、リモートクライアントとストアドプロシージャーのセッションでは何もせず、常に false を返します。
.setPrivileges()
関数は、引数として渡したアクセス権やロールをセッションと紐づけ、実行が成功した場合に true を返します。
-
privilege には、アクセス権の名称を文字列として渡します (複数の場合はカンマ区切り)。
-
privileges には、アクセス権の名称を文字列のコレクションとして渡します。
-
settings には、以下のプロパティを持つオブジェクトを渡します:
プロパティ | 型 | 説明 |
---|---|---|
privileges | Text または Collection | |
roles | Text または Collection | |
userName | テキスト | (任意) セッションと紐づけるユーザー名 |
権限とロールは、プロジェクトの roles.json
ファイルで定義されます。 詳細については、権限 を参照してください。
privileges
または roles
プロパティに、roles.json
ファイルで宣言されていない名前が含まれている場合、その名前は無視されます。
セッションにアクセス権またはロールが紐づいていない場合、そのセッションはデフォルトで ゲストセッション です。
userName
プロパティは Session オブジェクトレベルで利用可能です (読み取り専用)。