Saltar al contenido principal
Versión: 20

Session

Session objects are returned by the Session command when scalable sessions are enabled in your project. 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.

For detailed information about the session implementation, please refer to the web server Sessions section.

Resumen​

.clearPrivileges()    removes all the privileges associated to the session
.expirationDate : Text    la fecha y hora de expiración de la cookie de sesión
.hasPrivilege( privilege : Text ) : Boolean    returns True if the privilege is associated to the session, and False otherwise
.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 Guest (es decir, no tiene privilegios)
.setPrivileges( privilege : Text )
.setPrivileges( privileges : Collection )
.setPrivileges( settings : Object )
    associates the privilege(s) and/or role(s) defined in the parameter to the session
.storage : Object    a shared object that can be used to store information available to all requests of the web client
.userName : Text    el nombre de usuario asociado a la sesión

Session​

Historia
LanzamientoModificaciones
18 R6Añadidos

Session : 4D.Session

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

Descripción​

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

This command only works when scalable sessions are enabled. It returns Null when sessions are disabled or when legacy sessions are used.

When scalable sessions are enabled, the Session object is available from any web processes in the following contexts:

  • 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 peticiones móviles,
  • ORDA Data Model Class functions called with REST requests,
  • 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 "Disponible a través de etiquetas 4D y URLs". Se llama al método introduciendo la siguiente URL en el 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

.clearPrivileges()​

Historia
LanzamientoModificaciones
18 R6Añadidos

.clearPrivileges()

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

Descripción​

The .clearPrivileges() function removes all the privileges associated to the session. 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​

Historia
LanzamientoModificaciones
18 R6Añadidos

.expirationDate : Text

Descripción​

La propiedad .expirationDate contiene la fecha y hora de expiración de la cookie de sesión. El valor se expresa como texto en el formato ISO 8601: YYYY-MM-DDTHH:MM:SS.mmmZ.

Esta propiedad es de solo lectura. Se recalcula 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()​

Historia
LanzamientoModificaciones
18 R6Añadidos

.hasPrivilege( privilege : Text ) : Boolean

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

Descripción​

The .hasPrivilege() function returns True if the privilege is associated to the session, and False otherwise.

Ejemplo​

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

If (Session.hasPrivilege("WebAdmin"))
//Acceso concedido, no hacer nada
Else
//Mostrar una página de autenticación

End if

.idleTimeout​

Historia
LanzamientoModificaciones
18 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 está en lectura escritura.

Ejemplo​

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

.isGuest()​

Historia
LanzamientoModificaciones
18 R6Añadidos

.isGuest() : Boolean

ParámetrosTipoDescripción
ResultadoBoolean<-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 Guest (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()​

Historia
LanzamientoModificaciones
19 R8Compatibilidad con la propiedad "roles" en Settings
18 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​

The .setPrivileges() function associates the privilege(s) and/or role(s) defined in the parameter to the session.

  • 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 rol, o
  • Colección de cadenas que contienen roles
  • userNameTextNombre de usuario para asociar a la sesión (opcional)
    info

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

    Historia
    LanzamientoModificaciones
    18 R6Añadidos

    .storage : Object

    Descripción​

    The .storage property contains a shared object that can be used to store information available to all requests of the web client.

    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 "single": 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​

    Desea almacenar la IP del cliente en la propiedad .storage. Puede escribir en el método base 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​

    Historia
    LanzamientoModificaciones
    18 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. Puede definirse mediante la propiedad privileges de la función setPrivileges().

    Esta propiedad es solo lectura.