Saltar para o conteúdo principal
Versão: v20 R4 BETA

Session

Os objetos Session são devolvidos pelo comando Session quando são habilitadas as sessões escaláveis em seu projeto. O objeto Session é criado e mantido automaticamente pelo servidor web 4D para controlar a sessão de um cliente web (por exemplo, um navegador). Esse objeto oferece ao desenvolvedor web uma interface para a sessão de usuário, permitindo gerenciar privilégios, armazenar dados contextuais, partilhar informação entre processos e lançar processos preemptivos relacionados a sessão.

Para obter informação detalhada sobre a implementação da sessão, consulte Sessões do servidor web.

Resumo

.clearPrivileges()    retira todos os privilégios associados à sessão
.expirationDate : Text    a data e hora de expiração do cookie da sessão
.hasPrivilege( privilege : Text ) : Boolean    retorna Verdadeiro se o privilégio estiver associado à sessão, e Falso de outra forma
.idleTimeout : Integer    o tempo limite da sessão de inatividade (em minutos), após o qual a sessão é automaticamente encerrada por 4D
.isGuest() : Boolean    retorna Verdadeiro se a sessão for uma sessão de Convidado (ou seja, não tem privilégios)
.setPrivileges( privilege : Text )
.setPrivileges( privileges : Collection )
.setPrivileges( settings : Object )
    associa à sessão o(s) privilégio(s) definido(s) no parâmetro
.storage : Object    um objeto partilhado que pode ser utilizado para armazenar informação disponível para todos os pedidos do cliente da web
.userName : Text    o nome de usuário associado à sessão

Session

Histórico
VersãoMudanças
v18 R6Adicionado

Session : 4D. Session

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

|

Descrição

O comando Session devolve o objecto Sessão correspondente à actual sessão web escalável do utilizador.

Este comando só funciona quando estão ativadas as sessões escaláveis. Devolve Null quando as sessões estiverem desabilitadas ou quando utilizar sessões herdadas.

Quando se habilitam as sessões escaláveis, o objeto Sessão está disponível desde qualquer processo web nos seguintes contextos:

  • On Web Authentication, On Web Connection, e métodos databaseOn REST Authentication,
  • Em Mobile App Authentication e Em Mobile App Action métodos de base de dados para pedidos móveis,
  • As funções Data Model Class ORDA chamadas pelas petições REST,
  • 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.

Exemplo

Se definiu o método action_Session com o atributo "Available through 4D tags and URLs". Pode chamar ao método introduzindo a URL abaixo no navegador:

IP:port/4DACTION/action_Session
  //método action_Session
Case of
:(Session#Null)
If(Session.hasPrivilege("WebAdmin")) //chamada da função hasPrivilege
WEB SEND TEXT("4DACTION --> Session is WebAdmin")
Else
WEB SEND TEXT("4DACTION --> Session is not WebAdmin")
End if
Else
WEB SEND TEXT("4DACTION --> Sesion is null")
End case

.clearPrivileges()

Histórico
VersãoMudanças
v18 R6Adicionado

.clearPrivileges()

ParâmetroTipoDescrição
Não exige nenhum parâmetro

|

Descrição

A função .clearPrivileges() retira todos os privilégios associados à sessão. Como resultado, a sessão torna-se automaticamente uma sessão de convidado.

Exemplo

//Invalidate a session
var $isGuest : Boolean Session.clearPrivileges()
$isGuest:=Session.isGuest() //$isGuest is True

.expirationDate

Histórico
VersãoMudanças
v18 R6Adicionado

.expirationDate : Text

Descrição

A propriedade .expirationDate contém a data e hora de expiração do cookie da sessão. .

Essa propriedade é apenas leitura. É recalculada automaticamente se modificar o valor da propriedade .idleTimeout.

Exemplo

var $expiration : Text
$expiration:=Session.expirationDate //por exemplo "2021-11-05T17:10:42Z"

.hasPrivilege()

Histórico
VersãoMudanças
v18 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 Verdadeiro se o privilégio estiver associado à sessão, e Falso de outra forma.

Exemplo

Se quiser comprovar se o privilégio "WebAdmin" está associado à sessão:

If (Session.hasPrivilege("WebAdmin"))
//Access is granted, do nothing Else
//Display an authentication page End if

.idleTimeout

Histórico
VersãoMudanças
v18 R6Adicionado

.idleTimeout : Integer

Descrição

A propriedade .idleTimeout contém o tempo limite da sessão de inatividade (em minutos), após o qual a sessão é automaticamente encerrada por 4D.

Se não se definir esta propriedade, o valor padrão é 60 (1h).

Quando se definir esta propriedade, a propriedade .expirationDate é atualizada em consequência.

O valor não pode ser inferior a 60: se definir um valor inferior, o tempo de espera se eleva até 60.

Essa propriedade éapenas 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

.isGuest()

Histórico
VersãoMudanças
v18 R6Adicionado

.isGuest() : Boolean

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

|

Descrição

A função .isGuest() retorna Verdadeiro se a sessão for uma sessão de Convidado (ou seja, não tem privilégios).

Exemplo

No método base On Web Connection:

If (Session.isGuest())
//Do something for Guest user End if

.setPrivileges()

Histórico
VersãoMudanças
v19 R8Suporte da propriedade "roles" das Settings
v18 R6Adicionado

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

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)

|

Descrição

A função .setPrivileges() associa à sessão o(s) privilégio(s) definido(s) no parâmetro.

  • No parâmetro privilege, passe uma string contendo um nome de privilégio (ou vários nomes de privilégio separados por vígulas).

  • No parâmetro privileges, passe uma coleção de strings contendo nomes de privilégios.

  • No parâmetro settings, passe um objeto contendo as propriedades abaixo:

PropriedadeTipoDescrição
privilegesText ou Collection
  • Strings contendo um nome de privilégio ou
  • Collection de strings contendo nomes de privilégios
  • rolesText ou Collection
  • Strings contendo um papel ou
  • Coleção de strings contendo papéis
  • userNameTextNome de usuário associado à sessão (opcional)
    info

    Os privilégios e papéis são definidos no arquivo roles.json do projeto. Para mais informações, consulte por favor a secção Privileges.

    Se a propriedade privilegios ou roles conter um nome que não é declarado no arquivo roles.json, ele é ignorado.

    Como padrão quando não houver um privilégio associado à sessão, a sessão é Guest session.

    A propriedade userName está disponível no nível do objeto da sessão (apenas 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

    .storage

    Histórico
    VersãoMudanças
    v18 R6Adicionado

    .storage : Object

    Descrição

    A propriedade .storage contém um objeto partilhado que pode ser utilizado para armazenar informação disponível para todos os pedidos do cliente da web.

    Quando um objeto Session for criado, a propriedade .storage é vazia. Já que é um objeto partilhado, essa propriedade estará disponível no objeto Storage do servidor.

    Da mesma forma que o objeto Storage do servidor, a propriedade .storage sempre será "single": adicionar um objeto partilhado ou uma collection partilhada a .storage não cria um grupo partilhado.

    Esas propriedade é read only mas retorna um objeto read-write.

    Exemplo

    Se quiser armazenar a IP do cliente na propriedade .storage. 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

    .userName

    Histórico
    VersãoMudanças
    v18 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.

    Essa propriedade é uma string vazia como padrão. Pode ser estabelecida usando a propriedade privileges da função setPrivileges().

    Essa propriedade éapenas leitura.