Session
Os objetos de sessão são retornados pelo comando Session
. Esses objetos fornecem ao desenvolvedor uma interface que permite gerenciar a sessão atual do usuário e executar ações como armazenar dados contextuais, compartilhar informações entre processos de sessão, iniciar processos preemptivos relacionados à sessão ou (somente na Web) gerenciar privilégios.
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.
- Sessões de usuário cliente remoto: em aplicações cliente/servidor, os usuários remotos têm suas próprias sessões gerenciadas no servidor.
- Sessão de procedimentos armazenados: Todos os procedimentos armazenados executados no servidor compartilham a mesma sessão de usuário virtual.
A disponibilidade de propriedades e funções no objeto Session
depende do tipo de sessão.
Resumo
.clearPrivileges() : Boolean remove todos os privilégios associados à sessão e retorna True se a execução foi bem sucedida |
.expirationDate : Text a data e a hora de expiração do cookie de sessão |
.getPrivileges() : Collection retorna uma coleção de todos os nomes de privilégios associados à sessão |
.hasPrivilege( privilege : Text ) : Boolean retorna True se o privilege estiver associado à sessão e False caso contrário |
.id : Text o identificador único (UUID) da sessão no servidor |
.idleTimeout : Integer o tempo limite da sessão de inatividade (em minutos), após o qual a sessão é automaticamente encerrada pelo 4D |
.info : Object descreve o cliente remoto ou a sessão do procedimento armazenado no servidor |
.isGuest() : Boolean retorna True se a sessão for uma sessão Guest (ou seja, não tem privilégios) |
.setPrivileges( privilege : Text ) : Boolean .setPrivileges( privileges : Collection ) .setPrivileges( settings : Object ) : Boolean associa os privilégios e/ou papéis definidos no parâmetro para a sessão e retorna True se a execução foi bem sucedida |
.storage : Object um objeto compartilhado que pode ser usado para armazenar informações disponíveis para todos os processos da sessão |
.userName : Text o nome de usuário associado à sessão |
.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
Essa função não faz nada e sempre retorna True com cliente remoto e sessões de procedimento armazenado.
A função .clearPrivileges()
remove todos os privilégios associados à sessão e retorna True se a execução foi bem sucedida . Como resultado, a sessão torna-se automaticamente uma sessão de convidado.
Exemplo
//Invalidar uma sessão de usuário da web
var $isGuest : Boolean
var $isOK : Boolean
$isOK:=Session.clearPrivileges()
$isGuest:=Session.isGuest() //$isGuest é 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.
A propriedade .expirationDate
contém a data e a hora de expiração do cookie de sessão. O valor é expresso como texto no formato ISO 8601: 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
A função .getPrivileges()
retorna uma coleção de todos os nomes de privilégios associados à sessão.
Com sessões de cliente remoto e procedimento armazenado, essa função retorna uma coleção que contém apenas "WebAdmin".
Os privilégios são atribuídos a uma sessão usando a função setPrivileges()
.
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})
Assumindo que a função authentify()
seja chamada com o papel "Médio":
var $privileges : Collection
$privileges := Session.getPrivileges()
//$privileges: ["simple","medium"]
Veja também
.setPrivileges()
Permissões - Inspecionar os privilégios na sessão para facilitar a depuração (publicação no blog)
.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
A função .hasPrivilege()
retorna True se o privilege estiver associado à sessão e False caso contrário.
Com sessões de procedimento armazenado e cliente remoto, essa função sempre retorna True, independentemente do privilégio.
Exemplo
se quiser verificar se o privilégio "WebAdmin" está associado à sessão do usuário web:
Se (Session.hasPrivilege("WebAdmin"))
£//Acesso é concedido, não faça nada
Else
➲ //Exibe uma página de autenticação
End se
.id
História
Release | Mudanças |
---|---|
20 R5 | Adicionado |
.id : Text
Descrição
A propriedade .id
contém o identificador único (UUID) da sessão no servidor. Esta string única é automaticamente atribuída pelo servidor para cada sessão e permite que você identifique seus processos.
.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.
A propriedade .idleTimeout
contém o tempo limite da sessão de inatividade (em minutos), após o qual a sessão é automaticamente encerrada pelo 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
Se (Session.isGuest())
「// Uma sessão de convidado será fechada após 60 minutos de inatividade
Sessão. dleTimeout:=60
Senão
「// Outras sessões serão fechadas após 120 minutos de inatividade
├Session.idleTimeout:=120
End se
.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.
A propriedade .info
descreve o cliente remoto ou a sessão do procedimento armazenado no servidor.
O objeto .info
é o mesmo objeto retornado pelo comando Process activity
para sessões de cliente remoto e procedimento armazenado.
O objeto .info
contém as seguintes propriedades:
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 | Sessões remotas: ID persistente da sessão |
Desde . nfo
é uma propriedade computada, é recomendável chamá-lo uma vez e então armazená-lo em uma variável local se você quiser fazer algum processamento em suas propriedades.
.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.
A função .isGuest()
retorna True se a sessão for uma sessão Guest (ou seja, não tem privilégios).
Exemplo
No método base On Web Connection
:
If (Session.isGuest())
//Fazer algo para o usuário convidado
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
Essa função não faz nada e sempre retorna False com sessões de cliente remoto e procedimento armazenado.
A função .setPrivileges()
associa os privilégios e/ou papéis definidos no parâmetro para a sessão e retorna True se a execução foi bem sucedida .
-
No parâmetro privilege, passe uma cadeia de caracteres contendo um nome de privilégio (ou vários nomes de privilégio separados por vírgula).
-
No parâmetro privileges, passe uma coleção de cadeias de caracteres contendo nomes de privilégios.
-
No parâmetro settings, passe um objeto que contenha as seguintes propriedades:
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.
Se a propriedade privileges
ou roles
tiverem um nome que não seja declarado no arquivo roles.json
, ele será ignorado.
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
... //Autenticar o usuário
If ($userOK) //O usuário foi aprovado
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 | Suporte a sessões de procedimento armazenado e cliente remoto |
18 R6 | Adicionado |
.storage : Object
Descrição
A propriedade .storage
contém um objeto compartilhado que pode ser usado para armazenar informações disponíveis para todos os processos da sessão.
Quando um objeto Session
é criado, a propriedade .storage
está vazia. Como se trata de um objeto compartilhado, essa propriedade estará disponível no objeto Storage
do servidor.
Como o objeto
Storage
do servidor, a propriedade.storage
é sempre "única": adicionar um objeto compartilhado ou uma coleção compartilhada a.storage
não cria um grupo compartilhado.
Essa propriedade é apenas de leitura, mas retorna um objeto de leitura e gravação.
Você pode obter a propriedade .storage
de uma sessão usando o comando Session storage
.
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 | Suporte a sessões de procedimento armazenado e cliente remoto |
18 R6 | Adicionado |
.userName : Text
Descrição
A propriedade .userName
contém o nome de usuário associado à sessão. 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()
. - Com sessões de procedimento remotas e armazenadas, esta propriedade retorna o mesmo nome de usuário que o comando
usuário atual
.
Essa propriedade é somente leitura.