Session
Session オブジェクトは Session
コマンドによって返されます。 このオブジェクトは、カレントユーザーセッションを管理するためのインターフェースをデベロッパーに対して提供し、コンテキストデータの保存、プロセス間の情報共有、セッションに関連したプリエンプティブプロセスの開始などのアクションの実行や、アクセス権 の管理を可能にします。
セッションの種類
The following types of sessions are supported by this class:
- Webユーザーセッション: プロジェクトにおいてスケーラブルセッションが有効化されている 場合、Webユーザーセッションが利用可能です。 これらは Web および REST 接続に使用され、権限を割り当てることができます。
- リモートクライアントユーザー セッション: クライアント/サーバーアプリケーションでは、リモートユーザーは、サーバー上で管理される独自のセッションを持ちます。
- ストアドプロシージャーセッション: サーバ上で実行されるすべてのストアドプロシージャーは、同じ仮想ユーザーセッションを共有します。
- Standalone session: Local session object returned in single-user application (useful in development and test phases of client/server applications).
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".
権限は、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 | Text | -> | 確認するアクセス権の名称 |
戻り値 | 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.
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 theProcess activity
command for remote client and stored procedure sessions. - The
.info
object is the same object as the one returned by theSession info
command for a standalone session.
.info
オブジェクトには、次のプロパティが格納されています:
プロパティ | 型 | 説明 |
---|---|---|
type | Text | Session type: "remote", "storedProcedure", "standalone" |
userName | Text | 4Dユーザー名 (.userName と同じ値) |
machineName | Text | リモートセッション: リモートマシンの名前。 Stored procedures session: name of the server machine. Standalone session: name of the machine |
systemUserName | Text | リモートセッション: リモートマシン上で開かれたシステムセッションの名前。 |
IPAddress | Text | リモートマシンの IPアドレス。 |
hostType | Text | ホストタイプ: "windows" または "mac" |
creationDateTime | 日付 (ISO 8601) | Date and time of session creation. Standalone session: date and time of application startup |
state | Text | セッションの状態: "active", "postponed", "sleeping" |
ID | Text | セッションUUID (.id と同じ値)) |
persistentID | Text | リモートセッション: セッションの永続的な 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 R8 | roles プロパティをサポート |
18 R6 | 追加 |
.setPrivileges( privilege : Text ) : Boolean
.setPrivileges( privileges : Collection )
.setPrivileges( settings : Object ) : Boolean
引数 | 型 | 説明 | |
---|---|---|---|
privilege | Text | -> | アクセス権の名称 |
privileges | Collection | -> | アクセス権の名称のコレクション |
settings | Object | -> | "privileges" プロパティ (文字列またはコレクション) を持つオブジェクト |
戻り値 | Boolean | <- | 実行が正常に終わった場合には true |
説明
This function does nothing and always returns False with remote client, stored procedure, and standalone sessions.
.setPrivileges()
関数は、引数として渡したアクセス権やロールをセッションと紐づけ、実行が成功した場合に true を返します。
-
privilege には、アクセス権の名称を文字列として渡します (複数の場合はカンマ区切り)。
-
privileges には、アクセス権の名称を文字列のコレクションとして渡します。
-
settings には、以下のプロパティを持つオブジェクトを渡します:
プロパティ | 型 | 説明 |
---|---|---|
privileges | Text または Collection | |
roles | Text または Collection | |
userName | Text | (任意) セッションと紐づけるユーザー名 |
権限とロールは、プロジェクトの 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
参照
.storage
履歴
リリース | 内容 |
---|---|
20 R5 | リモートクライアントとストアドプロシージャーセッションをサポート |
18 R6 | 追加 |
.storage : Object
説明
.storage
プロパティは、セッションのすべてのプロセスで利用可能な情報を保存しておける共有オブジェクトを格納します。
Session
オブジェクトの作成時には、.storage
プロパティは空です。 共有オブジェクトのため、このプロパティはサーバー上の Storage
オブジェクトにおいて利用可能です。
サーバーの
Storage
オブジェクトと同様に、.storage
プロパティは常に "single" で存在します。 共有オブジェクトや共有コレクションを.storage
に追加しても、共有グループは作成されません。
このプロパティは 読み取り専用 ですが、戻り値のオブジェクトは読み書き可能です。
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.
このプロパティは 読み取り専用 です。