Saltar al contenido principal
Versión: v20 BETA

Session

Los objetos Session son devueltos por el comando Session cuando se habilitan las sesiones escalables en su proyecto. El objeto Session es creado y mantenido automáticamente por el servidor web 4D para controlar la sesión de un cliente web (por ejemplo, un navegador). Este objeto proporciona al desarrollador web una interfaz para la sesión de usuario, permitiendo gestionar privilegios, almacenar datos contextuales, compartir información entre procesos y lanzar procesos preventivos relacionados con la sesión.

Para obtener información detallada sobre la implementación de la sesión, consulte la sección Sesiones del servidor web.

Resumen

.clearPrivileges()    elimina todos los privilegios asociados a la sesión
.expirationDate : Text    la fecha y la hora de expiración de la cookie de sesión
.hasPrivilege( privilege : Text ) : Boolean    devuelve True si el privilegio está asociado a la sesión, y False en caso contrario
.idleTimeout : Integer    el tiempo de inactividad de la sesión (en minutos), después del cual la sesión es cerrada automáticamente por 4D
.isGuest() : Boolean    devuelve True si la sesión es una sesión de invitado (es decir, no tiene privilegios)
.setPrivileges( privilege : Text )
.setPrivileges( privileges : Collection )
.setPrivileges( settings : Object )
    asocia a la sesión los privilegios y/o roles definidos en el parámetro
.storage : Object    un objeto compartido que puede utilizarse para almacenar la información disponible para todas las peticiones del cliente web
.userName : Text    el nombre de usuario asociado a la sesión

Session

Histórico
VersiónModificaciones
v18 R6Añadidos

Session : 4D.Session

ParámetrosTipoDescripción
Result4D.Session<-Objeto Session

|

Descripción

El comando Session devuelve el objeto Session correspondiente a la sesión web usuario extensible actual.

Este comando sólo funciona cuando están activadas las sesiones escalables. Devuelve Null cuando las sesiones están deshabilitadas o cuando se utilizan sesiones heredadas.

Cuando se habilitan las sesiones escalables, el objeto Session está disponible desde cualquier proceso web en los siguientes contextos:

  • Métodos base On Web Authentication, On Web Connection, y On REST Authentication,
  • Métodos base On Mobile App Authentication y On Mobile App Action para las peticiones móviles,
  • Las funciones Data Model Class ORDA llamadas por las peticiones REST,
  • código procesado a través de las etiquetas 4D en las páginas semidinámicas (4DTEXT, 4DHTML, 4DEVAL, 4DSCRIPT/, 4DCODE)
  • los métodos proyecto con el atributo "Available through 4D tags and URLs (4DACTION...)" y llamados a través de 4DACTION/ urls.

Ejemplo

Ha definido el método action_Session con el atributo "Available through 4D tags and URLs". Se llama al método introduciendo la siguiente URL en el navegador:

IP:port/4DACTION/action_Session
  //método action_Session
Case of
:(Session#Null)
If(Session.hasPrivilege("WebAdmin")) //llamada de la función 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
VersiónModificaciones
v18 R6Añadidos

.clearPrivileges()

ParámetrosTipoDescripción
No requiere ningún parámetro

|

Descripción

La función .clearPrivileges() elimina todos los privilegios asociados a la sesión. Como resultado, la sesión se convierte automáticamente en una sesión de invitado.

Ejemplo

//Invalidar una sesión
var $isGuest : Boolean

Session.clearPrivileges()
$isGuest:=Session.isGuest() //$isGuest es True

.expirationDate

Histórico
VersiónModificaciones
v18 R6Añadidos

.expirationDate : Text

Descripción

La propiedad .expirationDate contiene la fecha y la hora de expiración de la cookie de sesión. .

Esta propiedad es de sólo lectura. Se vuelve a calcular automáticamente si se modifica el valor de la propiedad .idleTimeout.

Ejemplo

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

.hasPrivilege()

Histórico
VersiónModificaciones
v18 R6Añadidos

.hasPrivilege( privilege : Text ) : Boolean

ParámetrosTipoDescripción
privilegeText<-Nombre del privilegio a verificar
ResultBoolean<-True si la sesión tiene privilege, False en caso contrario

|

Descripción

La función .hasPrivilege() devuelve True si el privilegio está asociado a la sesión, y False en caso contrario.

Ejemplo

Quiere comprobar si el privilegio "WebAdmin" está asociado a la sesión:

If (Session.hasPrivilege("WebAdmin"))
//El acceso está concedido, no haga nada
Else
//Mostrar una página de autenticación

End if

.idleTimeout

Histórico
VersiónModificaciones
v18 R6Añadidos

.idleTimeout : Integer

Descripción

La propiedad .idleTimeout contiene el tiempo de inactividad de la sesión (en minutos), después del cual la sesión es cerrada automáticamente por 4D.

Si no se define esta propiedad, el valor por defecto es 60 (1h).

Cuando se define esta propiedad, la propiedad .expirationDate se actualiza en consecuencia.

El valor no puede ser inferior a 60: si se define un valor inferior, el tiempo de espera se eleva hasta 60.

Esta propiedad es de sólo escritura.

Ejemplo

If (Session.isGuest())
// Una sesión de invitado se cerrará tras 60 minutos de inactividad
Session.idleTimeout:=60
Else
// Las demás sesiones se cerrarán tras 120 minutos de inactividad
Session.idleTimeout:=120
End if

.isGuest()

Histórico
VersiónModificaciones
v18 R6Añadidos

.isGuest() : Boolean

ParámetrosTipoDescripción
ResultBoolean<-True si la sesión es una sesión Guest, False en caso contrario

|

Descripción

La función .isGuest() devuelve True si la sesión es una sesión de invitado (es decir, no tiene privilegios).

Ejemplo

En el método base On Web Connection:

If (Session.isGuest())
//Hacer algo para el usuario invitado
End if

.setPrivileges()

Histórico
VersiónModificaciones
v19 R8Compatibilidad con la propiedad "roles" en Settings
v18 R6Añadidos

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

ParámetrosTipoDescripción
privilegeText->Nombre del privilegio
privilegesCollection->Colección de nombres de privilegios
settingsObject->Objeto con una propiedad "privilegios" (cadena o colección)

|

Descripción

La función .setPrivileges() asocia a la sesión los privilegios y/o roles definidos en el parámetro.

  • En el parámetro privilege, pase una cadena que contenga un nombre de privilegio (o varios nombres de privilegio separados por comas).

  • En el parámetro privileges, pase una colección de cadenas que contengan nombres de privilegios.

  • En el parámetro settings, pase un objeto que contenga las siguientes propiedades:

PropiedadTipoDescripción
privilegesText o Collection
  • Cadena que contiene un nombre de privilegio, o
  • Colección de cadenas que contienen nombres de privilegios
  • rolesText o Collection
  • Cadena que contiene un nombre de rol, o
  • Colección de cadenas que contienen nombres de roles
  • userNameTextNombre de usuario para asociar a la sesión (opcional)

    |

    Los privilegios y los roles se definen en el archivo roles.json del proyecto. Para más información, consulte la sección Privilegios.

    :::

    Si la propiedad privileges o roles contiene un nombre que no está declarado en el archivo roles.json, se ignora.

    Por defecto, cuando no hay ningún privilegio o rol asociado a la sesión, la sesión es una sesión invitado.

    La propiedad userName está disponible a nivel de objeto de sesión (sólo lectura).

    Ejemplo

    En un método de autenticación personalizado, se establece el privilegio "WebAdmin" para el usuario:

    var $userOK : Boolean

    ... //Autenticar al usuario

    If ($userOK) //El usuario ha sido aprobado
    var $info : Object
    $info:=New object()
    $info.privileges:=New collection("WebAdmin")
    Session.setPrivileges($info)
    End if

    .storage

    Histórico
    VersiónModificaciones
    v18 R6Añadidos

    .storage : Object

    Descripción

    La propiedad .storage contiene un objeto compartido que puede utilizarse para almacenar la información disponible para todas las peticiones del cliente web.

    Cuando se crea un objeto Session, la propiedad .storage está vacía. Al ser un objeto compartido, esta propiedad estará disponible en el objeto Storage del servidor.

    Al igual que el objeto Storage del servidor, la propiedad .storage es siempre "única": añadir un objeto compartido o una colección compartida a .storage no crea un grupo compartido.

    Esta propiedad es sólo lectura en sí misma pero devuelve un objeto de lectura-escritura.

    Ejemplo

    Se desea almacenar la IP del cliente en la propiedad .storage. Puede escribir en el método de base de datos 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
    VersiónModificaciones
    v18 R6Añadidos

    .userName : Text

    Descripción

    La propiedad .userName contiene el nombre de usuario asociado a la sesión. Puede utilizarlo para identificar al usuario dentro de su código.

    Esta propiedad es una cadena vacía por defecto. Se puede establecer mediante la propiedad privileges de la función setPrivileges().

    Esta propiedad esde sólo lectura.