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
Lanzamiento | Modificaciones |
---|---|
18 R6 | Añadidos |
Session : 4D.Session
Parámetros | Tipo | Descripción | |
---|---|---|---|
Result | 4D.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
, yOn REST Authentication
, - Métodos base
On Mobile App Authentication
yOn 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
Lanzamiento | Modificaciones |
---|---|
18 R6 | Añadidos |
.clearPrivileges()
| Parámetros | Tipo | | Descripció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
Lanzamiento | Modificaciones |
---|---|
18 R6 | Añ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
Lanzamiento | Modificaciones |
---|---|
18 R6 | Añadidos |
.hasPrivilege( privilege : Text ) : Boolean
Parámetros | Tipo | Descripción | |
---|---|---|---|
privilege | Text | <- | Nombre del privilegio a verificar |
Result | Boolean | <- | 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
Lanzamiento | Modificaciones |
---|---|
18 R6 | Añ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
Lanzamiento | Modificaciones |
---|---|
18 R6 | Añadidos |
.isGuest() : Boolean
Parámetros | Tipo | Descripción | |
---|---|---|---|
Result | Boolean | <- | 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
Lanzamiento | Modificaciones |
---|---|
19 R8 | Compatibilidad con la propiedad "roles" en Settings |
18 R6 | Añadidos |
.setPrivileges( privilege : Text )
.setPrivileges( privileges : Collection )
.setPrivileges( settings : Object )
Parámetros | Tipo | Descripción | |
---|---|---|---|
privilege | Text | -> | Nombre del privilegio |
privileges | Collection | -> | Colección de nombres de privilegios |
settings | Object | -> | 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:
Propiedad | Tipo | Descripción |
---|---|---|
privileges | Text o Collection | |
roles | Text o Collection | |
userName | Text | Nombre 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
Lanzamiento | Modificaciones |
---|---|
18 R6 | Añ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
Lanzamiento | Modificaciones |
---|---|
18 R6 | Añ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 es de sólo lectura.