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

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:

nota

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

Session

História
ReleaseMudanças
20 R5Support of remote client and stored procedure sessions
18 R6Adicionado

Session : 4D.Session

ParâmetroTipoDescrição
Resultados4D. Session<-Objecto Session

Descrição

The Session command returns the Session object corresponding to the current user session.

Dependendo do processo a partir do qual o comando é chamado, a sessão atual do usuário pode ser:

Para obter mais informações, consulte o parágrafo Tipos de sessão.

If the command is called from a non supported context (single-user application, scalable sessions disabled...), it returns Null.

Sessões web

The Session object of web sessions is available from any web process:

  • On Web Authentication, On Web Connection, and On REST Authentication database methods,
  • código processado a través das etiquetas 4D nas páginas semidinâmicas (4DTEXT, 4DHTML, 4DEVAL, 4DSCRIPT/, 4DCODE)
  • os métodos projeto com o atributo "Available through 4D tags and URLs (4DACTION...)" e chamados através de 4DACTION/ urls,
  • On Mobile App Authentication and On Mobile App Action database methods for mobile requests,
  • Funções ORDA chamadas com solicitações REST.

For more information on web user sessions, please refer to the Web Server Sessions section.

Sessões cliente remoto

The Session object of remote client sessions is available from:

  • Métodos de projeto que têm o atributo Execute on Server (são executados no processo "geminado" do processo do cliente),
  • Triggers,
  • 'Conexão aberta com o servidor' e 'Conexão com o servidor' métodos de banco de dados.

Para mais informações em sessões usuários remotos, consulte o parágrafo Sessões usuário cliente remoto.

a sessão de procedimentos armazenados

Todos os processos de procedimento armazenado compartilham a mesma sessão de usuário virtual. O objeto Session de procedimentos armazenados está disponível em:

  • métodos chamados com o comando Execute on server,
  • On Server Startup, On Server Shutdown, On Backup Startup, On Backup Shutdown, and On System event database methods

For information on stored procedures virtual user session, please refer to the 4D Server and the 4D Language page.

Exemplo

You have defined the action_Session method with attribute "Available through 4D tags and URLs". Pode chamar ao método introduzindo a URL abaixo no navegador:

IP:port/4DACTION/action_Session
  //action_Session method
Case of
:(Session#Null)
If(Session.hasPrivilege("WebAdmin")) //calling the hasPrivilege function
WEB SEND TEXT("4DACTION --> Session is WebAdmin")
Else
WEB SEND TEXT("4DACTION --> Session is not WebAdmin")
End if
Else
WEB SEND TEXT("4DACTION --> Session is null")
End case

Veja também

Session storage by ID

.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

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

.expirationDate : Text

Descrição

nota

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

.getPrivileges() : Collection

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

info

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

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

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

tip

You can use this property to get the .storage object of a session thanks to the Session storage by ID command.

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

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

.info : Object

Descrição

nota

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 Get process activity command for remote client and stored procedure sessions.

The .info object contains the following properties:

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)
persistentIDTextID persistente da sessão
nota

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

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

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:

PropriedadeTipoDescrição
privilegesText ou Collection
  • String containing a privilege name, or
  • Collection of strings containing privilege names
  • rolesText ou Collection
  • String containing a role, or
  • Collection of strings containing roles
  • 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.

    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

    .getPrivileges()

    .storage

    História
    ReleaseMudanças
    20 R5Support of remote client and stored procedure sessions
    18 R6Adicionado

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

    tip

    You can get the .storage property of a session using the Session storage by ID 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
    ReleaseMudanças
    20 R5Support of remote client and stored procedure sessions
    18 R6Adicionado

    .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ção setPrivileges().
    • With remote and stored procedure sessions, this property returns the same user name as the Current user command.

    Essa propriedade é somente leitura.