Saltar para o conteúdo principal
Versão: 20 R7

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:

nota

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
ReleaseMudanças
18 R6Adicionado

.clearPrivileges() : Boolean

ParâmetroTipoDescrição
ResultadosParâmetros<-True se a execução for bem-sucedida

Descrição

nota

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
ReleaseMudanças
18 R6Adicionado

.expirationDate : Text

Descrição

nota

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
ReleaseMudanças
20 R6Adicionado

.getPrivileges() : Collection

ParâmetroTipoDescrição
ResultadosCollection<-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".

info

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
ReleaseMudanças
18 R6Adicionado

.hasPrivilege( privilege : Text ) : Boolean

ParâmetroTipoDescrição
privilegeText->Nome do privilegio a verificar
ResultadosParâ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
ReleaseMudanças
20 R5Adicionado

.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.

tip

Você pode usar essa propriedade para obter o objeto .storage de uma sessão graças ao comando storage.

.idleTimeout

História
ReleaseMudanças

|v18 R6|Adicionado|

.idleTimeout : Integer

Descrição

nota

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
ReleaseMudanças
20 R5Adicionado

.info : Object

Descrição

nota

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:

PropriedadeTipoDescrição
typeTextTipo de sessão: "remote" ou "storedProcedure"
userNameTextNome de usuário 4D (o mesmo valor que .userName)
machineNameTextSessões remotas: nome da máquina remota. Sessões remotas: nome da máquina remota.
systemUserNameTextSessões remotas: nome da sessão do sistema aberta na máquina remota.
IPAddressTextEndereço IP da máquina remota
hostTypeTextTipo de host: "windows" ou "mac"
creationDateTimeDate ISO 8601Data e hora de criação da sessão
stateTextEstado da sessão: "ativa", "adiada", "em espera"
IDTextUUID da sessão (mesmo valor que .id)
persistentIDTextSessões remotas: ID persistente da sessão
nota

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
ReleaseMudanças
18 R6Adicionado

.isGuest() : Boolean

ParâmetroTipoDescrição
ResultadosParâmetros<-True se a sessão for uma sessão Guest, False caso contrário

Descrição

nota

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
ReleaseMudanças
19 R8Suporte da propriedade "roles" das Settings
18 R6Adicionado

.setPrivileges( privilege : Text ) : Boolean
.setPrivileges( privileges : Collection )
.setPrivileges( settings : Object ) : Boolean

ParâmetroTipoDescrição
privilegeText->Nome do privilégio
privilegesCollection->Collection de nomes de privilégios
settingsObject->Objetos com as propriedades "privilégios" (string ou collection)
ResultadosParâmetros<-True se a execução for bem-sucedida

Descrição

nota

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:

PropriedadeTipoDescrição
privilegesText ou Collection
  • String contendo um nome de privilégio, ou
  • Coleção de cadeias de caracteres contendo nomes de privilégios
  • rolesText ou Collection
  • String que contém uma função, ou
  • Coleção de cadeias de caracteres contendo funções
  • userNameTextNome de usuário associado à sessão (opcional)
    nota

    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

    .getPrivileges()

    .storage

    História
    ReleaseMudanças
    20 R5Suporte a sessões de procedimento armazenado e cliente remoto
    18 R6Adicionado

    .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.

    tip

    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
    ReleaseMudanças
    20 R5Suporte a sessões de procedimento armazenado e cliente remoto
    18 R6Adicionado

    .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ção setPrivileges().
    • 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.