Session
Os objetos de sessão são retornados pelo comando Session
. These objects provide the developer with an interface allowing to manage the current user session and execute actions such as store contextual data, share information between session processes, launch session-related preemptive processes, or (web only) manage privileges.
Tipos de sessão
Três tipos de sessões são suportados por essa classe:
- Sessões de usuário web: sessões de usuário web estão disponíveis quando sessões escaláveis estão habilitadas em seu projeto. Eles são usados para conexões Web e REST e podem receber privilégios.
- Remote client user sessions: In client/server applications, remote users have their own sessions managed on the server.
- Stored procedures session: All stored procedures executed on the server share the same virtual user session.
The availability of properties and functions in the Session
object depends on the session type.
Resumo
.clearPrivileges() : Boolean removes all the privileges associated to the session and returns True if the execution was successful |
.expirationDate : Text the expiration date and time of the session cookie |
.getPrivileges() : Collection returns a collection of all the privilege names associated to the session |
.hasPrivilege( privilege : Text ) : Boolean returns True if the privilege is associated to the session, and False otherwise |
.id : Text the unique identifier (UUID) of the session on the server |
.idleTimeout : Integer the inactivity session timeout (in minutes), after which the session is automatically closed by 4D |
.info : Object describes the remote client or stored procedure session on the server |
.isGuest() : Boolean returns True if the session is a Guest session (i.e. it has no privileges) |
.setPrivileges( privilege : Text ) : Boolean .setPrivileges( privileges : Collection ) .setPrivileges( settings : Object ) : Boolean associates the privilege(s) and/or role(s) defined in the parameter to the session and returns True if the execution was successful |
.storage : Object a shared object that can be used to store information available to all processes of the session |
.userName : Text the user name associated to the session |
.clearPrivileges()
História
Release | Mudanças |
---|---|
18 R6 | Adicionado |
.clearPrivileges() : Boolean
Parâmetro | Tipo | Descrição | |
---|---|---|---|
Resultados | Parâmetros | <- | True se a execução for bem-sucedida |
Descrição
This function does nothing and always returns True with remote client and stored procedure sessions.
The .clearPrivileges()
function removes all the privileges associated to the session and returns True if the execution was successful. Como resultado, a sessão torna-se automaticamente uma sessão de convidado.
Exemplo
//Invalidate a web user session
var $isGuest : Boolean
var $isOK : Boolean
$isOK:=Session.clearPrivileges()
$isGuest:=Session.isGuest() //$isGuest is True
.expirationDate
História
Release | Mudanças |
---|---|
18 R6 | Adicionado |
.expirationDate : Text
Descrição
Essa propriedade só está disponível com sessões de usuário da Web.
The .expirationDate
property contains the expiration date and time of the session cookie. The value is expressed as text in the ISO 8601 format: YYYY-MM-DDTHH:MM:SS.mmmZ
.
Essa propriedade é somente leitura. Ele será automaticamente recalculado se o valor da propriedade .idleTimeout
for modificado.
Exemplo
var $expiration : Text
$expiration:=Session.expirationDate //por exemplo "2021-11-05T17:10:42Z"
.getPrivileges()
História
Release | Mudanças |
---|---|
20 R6 | Adicionado |
.getPrivileges() : Collection
Parâmetro | Tipo | Descrição | |
---|---|---|---|
Resultados | Collection | <- | Coleção de nomes de privilégios (strings) |
Descrição
The .getPrivileges()
function returns a collection of all the privilege names associated to the session.
With remote client and stored procedure sessions, this function returns a collection only containing "WebAdmin".
Privileges are assigned to a Session using the setPrivileges()
function.
Exemplo
O seguinte arquivo roles.json
foi definido:
{
"privileges":[
{
"privilege":"simple",
"includes":[
]
},
{
"privilege":"medium",
"includes":[
"simple"
]
}
],
"roles":[
{
"role":"Medium",
"privileges":[
"medium"
]
}
],
"permissions":{
"allowed":[
]
}
}
O papel de sessão é atribuído em uma função de datastore authentify()
:
//Datastore Class
exposed Function authentify($role : Text) : Text
Session.clearPrivileges()
Session.setPrivileges({roles: $role})
Assuming the authentify()
function is called with the "Medium" role:
var $privileges : Collection
$privileges := Session.getPrivileges()
//$privileges: ["simple","medium"]
Veja também
.setPrivileges()
Permissions – Inspect the privileges in the session for an easy debugging (blog post)
.hasPrivilege()
História
Release | Mudanças |
---|---|
18 R6 | Adicionado |
.hasPrivilege( privilege : Text ) : Boolean
Parâmetro | Tipo | Descrição | |
---|---|---|---|
privilege | Text | -> | Nome do privilegio a verificar |
Resultados | Parâmetros | <- | True se a sessão tiver privilege, False caso contrário |
Descrição
The .hasPrivilege()
function returns True if the privilege is associated to the session, and False otherwise.
With remote client and stored procedure sessions, this function always returns True, whatever the privilege.
Exemplo
You want to check if the "WebAdmin" privilege is associated to the web user session:
If (Session.hasPrivilege("WebAdmin"))
//Access is granted, do nothing
Else
//Display an authentication page
End if
.id
História
Release | Mudanças |
---|---|
20 R5 | Adicionado |
.id : Text
Descrição
The .id
property contains the unique identifier (UUID) of the session on the server. Esta string única é automaticamente atribuída pelo servidor para cada sessão e permite que você identifique seus processos.
You can use this property to get the .storage
object of a session thanks to the Session storage
command.
.idleTimeout
História
Release | Mudanças |
---|
|v18 R6|Adicionado|
.idleTimeout : Integer
Descrição
Essa propriedade só está disponível com sessões de usuário da Web.
The .idleTimeout
property contains the inactivity session timeout (in minutes), after which the session is automatically closed by 4D.
Se não se definir esta propriedade, o valor padrão é 60 (1h).
Quando essa propriedade é definida, a propriedade .expirationDate
é atualizada de acordo.
O valor não pode ser inferior a 60: se definir um valor inferior, o tempo de espera se eleva até 60.
Essa propriedade é leitura escrita.
Exemplo
If (Session.isGuest())
// A Guest session will close after 60 minutes of inactivity
Session.idleTimeout:=60
Else
// Other sessions will close after 120 minutes of inactivity
Session.idleTimeout:=120
End if
.info
História
Release | Mudanças |
---|---|
20 R5 | Adicionado |
.info : Object
Descrição
Essa propriedade só está disponível com sessões de procedimento armazenado e cliente remoto.
The .info
property describes the remote client or stored procedure session on the server.
The .info
object is the same object as the one returned by the Process activity
command for remote client and stored procedure sessions.
The .info
object contains the following properties:
Propriedade | Tipo | Descrição |
---|---|---|
type | Text | Tipo de sessão: "remote" ou "storedProcedure" |
userName | Text | Nome de usuário 4D (o mesmo valor que .userName ) |
machineName | Text | Sessões remotas: nome da máquina remota. Sessões remotas: nome da máquina remota. |
systemUserName | Text | Sessões remotas: nome da sessão do sistema aberta na máquina remota. |
IPAddress | Text | Endereço IP da máquina remota |
hostType | Text | Tipo de host: "windows" ou "mac" |
creationDateTime | Date ISO 8601 | Data e hora de criação da sessão |
state | Text | Estado da sessão: "ativa", "adiada", "em espera" |
ID | Text | UUID da sessão (mesmo valor que .id ) |
persistentID | Text | Remote sessions: Session's persistent ID |
Since .info
is a computed property, it is recommended to call it once and then to store it in a local variable if you want to do some processing on its properties.
.isGuest()
História
Release | Mudanças |
---|---|
18 R6 | Adicionado |
.isGuest() : Boolean
Parâmetro | Tipo | Descrição | |
---|---|---|---|
Resultados | Parâmetros | <- | True se a sessão for uma sessão Guest, False caso contrário |
Descrição
Essa função sempre retorna False com sessões de procedimento armazenado e cliente remoto.
The .isGuest()
function returns True if the session is a Guest session (i.e. it has no privileges).
Exemplo
No método base On Web Connection
:
If (Session.isGuest())
//Do something for Guest user
End if
.setPrivileges()
História
Release | Mudanças |
---|---|
19 R8 | Suporte da propriedade "roles" das Settings |
18 R6 | Adicionado |
.setPrivileges( privilege : Text ) : Boolean
.setPrivileges( privileges : Collection )
.setPrivileges( settings : Object ) : Boolean
Parâmetro | Tipo | Descrição | |
---|---|---|---|
privilege | Text | -> | Nome do privilégio |
privileges | Collection | -> | Collection de nomes de privilégios |
settings | Object | -> | Objetos com as propriedades "privilégios" (string ou collection) |
Resultados | Parâmetros | <- | True se a execução for bem-sucedida |
Descrição
This function does nothing and always returns False with remote client and stored procedure sessions.
The .setPrivileges()
function associates the privilege(s) and/or role(s) defined in the parameter to the session and returns True if the execution was successful.
-
In the privilege parameter, pass a string containing a privilege name (or several comma-separated privilege names).
-
In the privileges parameter, pass a collection of strings containing privilege names.
-
In the settings parameter, pass an object containing the following properties:
Propriedade | Tipo | Descrição |
---|---|---|
privileges | Text ou Collection | |
roles | Text ou Collection | |
userName | Text | Nome de usuário associado à sessão (opcional) |
Os privilégios e as funções são definidos no arquivo roles.json
do projeto. Para obter mais informações, consulte a seção Privilégios.
If the privileges
or roles
property contains a name that is not declared in the roles.json
file, it is ignored.
Como padrão quando não houver um privilégio associado à sessão, a sessão é uma Sessão de convidados.
A propriedade userName
está disponível no nível do objeto de sessão (somente leitura).
Exemplo
Em um método de autenticação personalizado, deve estabecer o privilégio "WebAdmin" ao usuário:
var $userOK : Boolean
... //Authenticate the user
If ($userOK) //The user has been approved
var $info : Object
$info:=New object()
$info.privileges:=New collection("WebAdmin")
Session.setPrivileges($info)
End if
Veja também
.storage
História
Release | Mudanças |
---|---|
20 R5 | Support of remote client and stored procedure sessions |
18 R6 | Adicionado |
.storage : Object
Descrição
The .storage
property contains a shared object that can be used to store information available to all processes of the session.
Quando um objeto Session
é criado, a propriedade .storage
está vazia. Since it is a shared object, this property will be available in the Storage
object of the server.
Like the
Storage
object of the server, the.storage
property is always "single": adding a shared object or a shared collection to.storage
does not create a shared group.
Essa propriedade é apenas de leitura, mas retorna um objeto de leitura e gravação.
You can get the .storage
property of a session using the Session storage
command.
Exemplo de sessão na web
Você deseja armazenar o IP do cliente na propriedade .storage
. Você pode escrever no método de banco de dados On Web Authentication
:
If (Session.storage.clientIP=Null) //first access
Use (Session.storage)
Session.storage.clientIP:=New shared object("value"; $clientIP)
End use End if
Exemplo de sessão remota
Você deseja compartilhar dados entre processos na mesma sessão:
Use (Session.storage)
Session.storage.settings:=New shared object("property"; $value; "property2"; $value2)
End use
.userName
História
Release | Mudanças |
---|---|
20 R5 | Support of remote client and stored procedure sessions |
18 R6 | Adicionado |
.userName : Text
Descrição
The .userName
property contains the user name associated to the session. Pode usá-la para identificar o usuário dentro de seu código.
- Com sessões da Web, essa propriedade é uma cadeia de caracteres vazia por padrão. Ele pode ser definido usando a propriedade
privileges
da funçãosetPrivileges()
. - With remote and stored procedure sessions, this property returns the same user name as the
Current user
command.
Essa propriedade é somente leitura.