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
| Lanzamiento | Modificaciones |
|---|---|
| 18 R6 | Añadidos |
Session : 4D.Session
| Parámetros | Tipo | Descripción | |
|---|---|---|---|
| Resultado | 4D.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 ConnectionyOn REST Authentication, - métodos base
On Mobile App AuthenticationyOn Mobile App Actionpara 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
| Lanzamiento | Modificaciones |
|---|---|
| 18 R6 | Añadidos |
.clearPrivileges()
| Parámetros | Tipo | Descripció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
| Lanzamiento | Modificaciones |
|---|---|
| 18 R6 | Añ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
| Lanzamiento | Modificaciones |
|---|---|
| 18 R6 | Añadidos |
.hasPrivilege( privilege : Text ) : Boolean
| Parámetros | Tipo | Descripción | |
|---|---|---|---|
| privilege | Text | <- | Nombre del privilegio a verificar |
| Resultado | Boolean | <- | 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
| 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 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
| Lanzamiento | Modificaciones |
|---|---|
| 18 R6 | Añadidos |
.isGuest() : Boolean
| Parámetros | Tipo | Descripción | |
|---|---|---|---|
| Resultado | 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 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
| 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
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:
| 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 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
| Lanzamiento | Modificaciones |
|---|---|
| 18 R6 | Añ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
Storagedel servidor, la propiedad.storagees siempre "single": añadir un objeto compartido o una colección compartida a.storageno 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
| 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. Puede definirse mediante la propiedad privileges de la función setPrivileges().
Esta propiedad es solo lectura.