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
履歴
| リリース | 内容 |
|---|---|
| 18 R6 | 追加 |
Session : 4D.Session
| 引数 | 型 | 説明 | |
|---|---|---|---|
| 戻り値 | 4D.Session | <- | Session オブジェクト |
|
説明
Session コマンドは、 カレントのスケーラブルユーザーWebセッションに対応する Session オブジェクトを返します。
スケーラブルセッションが有効化されている 場合にのみ、このコマンドは機能します。 セッションが無効な場合や、旧式セッションが使用されている場合には、Null を返します。
スケーラブルセッションが有効化されている場合、Session オブジェクトは次のコンテキストにおける、あらゆる Webプロセスから利用可能です:
On Web Authentication、On Web Connection、およびOn REST Authenticationデータベースメソッド- モバイルリクエスト用の
On Mobile App AuthenticationとOn 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")) //"WebAdmin" アクセス権がセッションに紐づいているかを確認
WEB SEND TEXT("4DACTION --> WebAdminアクセス権がセッションに付与されている")
Else
WEB SEND TEXT("4DACTION --> WebAdminアクセス権がセッションに付与されていない")
End if
Else
WEB SEND TEXT("4DACTION --> セッションはnullである")
End case
.clearPrivileges()
履歴
| リリース | 内容 |
|---|---|
| 18 R6 | 追加 |
.clearPrivileges()
| 引数 | 型 | | 説明 | | -- | - |::| -------------------------------------------- | | | | | このコマンドは引数を必要としません|
|
説明
.clearPrivileges() 関数は、 対象セッションに紐づいているアクセス権をすべて削除します。 結果的に、当該セッションは自動的にゲストセッションになります。
例題
// セッションを無効にします
var $isGuest : Boolean
Session.clearPrivileges()
$isGuest:=Session.isGuest() //$isGuest は true
.expirationDate
履歴
| リリース | 内容 |
|---|---|
| 18 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()
履歴
| リリース | 内容 |
|---|---|
| 18 R6 | 追加 |
.hasPrivilege( privilege : Text ) : Boolean
| 引数 | 型 | 説明 | |
|---|---|---|---|
| privilege | Text | <- | 確認するアクセス権の名称 |
| 戻り値 | Boolean | <- | セッションが privilege のアクセス権を持っていれば true、それ以外は false |
|
説明
.hasPrivilege() 関数は、 対象セッションに privilege のアクセス権が紐づいていれば true、でなければ false を返します。
例題
"WebAdmin" アクセス権がセッションに紐づいているかを確認します:
If (Session.hasPrivilege("WebAdmin"))
// アクセス権が付与されているので、何もしません
Else
// 認証ページを表示します
End if
.idleTimeout
履歴
| リリース | 内容 |
|---|---|
| 18 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()
履歴
| リリース | 内容 |
|---|---|
| 18 R6 | 追加 |
.isGuest() : Boolean
| 引数 | 型 | 説明 | |
|---|---|---|---|
| 戻り値 | Boolean | <- | ゲストセッションの場合は true、それ以外は false |
|
説明
.isGuest() 関数は、 アクセス権のないゲストセッションの場合は true を返します。
例題
On Web Connection データベースメソッドにて:
If (Session.isGuest())
// ゲストユーザー用の処理
End if
.setPrivileges()
履歴
| リリース | 内容 |
|---|---|
| 19 R8 | roles プロパティをサポート |
| 18 R6 | 追加 |
.setPrivileges( privilege : Text )
.setPrivileges( privileges : Collection )
.setPrivileges( settings : Object )
| 引数 | 型 | 説明 | |
|---|---|---|---|
| privilege | Text | -> | アクセス権の名称 |
| privileges | Collection | -> | アクセス権の名称のコレクション |
| settings | Object | -> | "privileges" プロパティ (文字列またはコレクション) を持つオブジェクト |
|
説明
.setPrivileges() 関数は、 引数として渡したアクセス権やロールをセッションと紐づけます。
-
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
履歴
| リリース | 内容 |
|---|---|
| 18 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
履歴
| リリース | 内容 |
|---|---|
| 18 R6 | 追加 |
.userName : Text
説明
.userName プロパティは、 セッションと紐づいたユーザー名を格納します。 このプロパティは、コード内でユーザーを確認するのに使用できます。
このプロパティはデフォルトでは空の文字列です。 これは、setPrivileges() 関数の privileges プロパティを使って設定することができます。
このプロパティは 読み取り専用 です。