Saltar al contenido principal
Versión: Siguiente

Sesiones de escritorio

Generalidades

A desktop session is a user-related execution context on 4D Server, 4D remote, or 4D single-user that does not result from any web or REST access.

Las sesiones de escritorio incluyen:

  • Remote user sessions: In client/server applications, remote users have their own sessions, managed from the client and from the server.
  • Sesiones de procedimientos almacenados: en aplicaciones cliente/servidor, la única sesión virtual de usuario que gestiona todos los procedimientos almacenados ejecutados en el servidor.
  • Sesiones autónomas: objeto de sesión local devuelto en una aplicación mono usuario (útil en las fases de desarrollo y de prueba de las aplicaciones cliente/servidor).

El siguiente diagrama muestra los diferentes tipos de sesión y cómo interactúan:

Al igual que en una sesión de usuario web, el código ejecutado en una sesión de escritorio tiene acceso a un objeto Session que proporciona funciones y propiedades que permiten almacenar valores de sesión y compartirlos entre procesos de usuario, por ejemplo utilizando el objeto session.storage.

Sin embargo, a diferencia del código ejecutado en las sesiones de usuario web, el código ejecutado en las sesiones de escritorio no está controlado por roles y privilegios. It can access any parts of the 4D application, including ORDA and data model classes (on 4D Server, users and groups feature can manage user accesses). Tenga en cuenta también que las sesiones de escritorio no requieren sesiones escalables para ser activadas.

You can nevertheless share a remote session with a web session so that desktop application users can access your 4D application through a web interface, using in particular Qodly pages and Web areas.

Sesiones de usuarios remotos

In client/server applications, when a user connects to the server, a remote user session object is created and available on both the server and the client. It is returned by the Session command on both machines.

Este objeto se maneja a través de las funciones y propiedades de la clase Session.

Comparación de objetos de sesión de usuario del lado del servidor y del lado del cliente

Dependiendo de dónde se ejecute el código, se dispondrá de un objeto session de usuario del lado del servidor o del lado del cliente. Both objects are similar, except that:

  • sus propiedades .storage no son el mismo objeto. A value stored in the .storage of the user session on the server will not be available in the .storage of the user session on the client and conversely.
  • for security reasons, the client-side session cannot execute functions that modify privileges (setPrivileges(), clearPrivileges(), promote(), demote(), restore()). Calling these functions on a client generates an error.
nota

Functions that read privileges can be called on both client and server sides (getPrivileges(), hasPrivilege(), isGuest())

Utilización

El objeto session del usuario remoto se utiliza para gestionar y compartir los datos de la sesión.

Within each environment, a session storage object is shared across all processes of the same user session. For example on the server, you can launch a user authentication and verification procedure when a client connects to the server, involving entering a code sent by e-mail or SMS into the application. A continuación, añada la información de usuario al almacenamiento de sesión, permitiendo al servidor identificar al usuario. De este modo, el servidor 4D puede acceder a la información del usuario para todos los procesos del cliente, lo que permite escribir código personalizado según el rol del usuario.

Within each environment, you can use the remote user session object to create an OTP and share the remote session for web accesses.

On the server, you can also assign privileges to a remote user session to control access when the session comes from Qodly pages running in web areas.

nota

Del lado del cliente, existen dos objetos de almacenamiento local distintos:

Compartir una sesión remota para los accesos web

Remote user sessions can be used to handle web accesses to the application by the same user and thus, manage their privileges. Esta posibilidad es especialmente útil para aplicaciones Cliente/Servidor en las que se utilizan páginas Qodly para la interfaz, que se ejecutan en máquinas remotas. Con esta configuración, sus aplicaciones disponen de modernas interfaces web basadas en CSS, pero siguen beneficiándose de la potencia y la sencillez del desarrollo cliente/servidor integrado. En tales aplicaciones, las páginas Qodly se ejecutan dentro de las áreas Web 4D estándar.

Para gestionar esta configuración en producción, es necesario utilizar sesiones de usuario remotas. En realidad, las peticiones procedentes tanto de la aplicación 4D remota como de sus páginas Qodly cargadas en áreas Web deben funcionar dentro de la misma sesión. You just have to share the session on the server between the remote client and its web pages so that you can have the same session storage and client license, wherever the request comes from (web or remote 4D).

Privileges should be set in the session before executing a web request, so that the user automatically gets their privileges for web access (see example). Tenga en cuenta que los privilegios solo se aplican a las peticiones procedentes de la web.

nota

Los privilegios sólo pueden definirse desde la sesión de usuario remoto en el servidor. For security reasons, they cannot be modified from the remote user session on the client (see Comparing server-side and client-side user session objects).

Las sesiones compartidas se gestionan con tokens OTP. After you created an OTP token for the remote session, you add the token (through the $4DSID parameter value) to web requests sent from Web areas containing Qodly pages (or from any web browser) so that the user session on the server is identified and shared. Del lado del servidor web, si una solicitud web contiene un id OTP en el parámetro $4DSID, se utiliza la sesión correspondiente a este token OTP.

nota

You can execute the OTP creation code from the server or directly from the client (on the server you can use for example the On Server Open Connection database method). However, keep in mind that the web session .storage is shared with the server-side user session .storage that and privileges can only be set from the user session on the server.

tip

For development and testing purposes, you can use a standalone session to code and test all features related to web access sharing, whether your application is intended for single-user or client/server deployment.

Ejemplo

En un formulario, obtenga una OTP y abra una página Qodly en un área Web:

Form.otp:=getOTP

Form.url:="http://localhost/$lib/renderer/?w=Products&$4DSID="+Form.otp

WA OPEN URL(*; "QodlyPage"; Form.url)

El método de proyecto getOTP (con la propiedad Ejecutar en el servidor en Cliente/Servidor):

// En sliente servidor:
// ----------------
// Método ejecutado en el servidor porque el objeto Session está en el servidor
// El objeto Session es Null en el cliente
//

#DECLARE() : Text

return Session.createOTP()

Aquí está el código utilizado para poner el privilegio "viewProducts" en la sesión:

// En cliente/servidor:
// ----------------
// Este código debe ejecutarse en el servidor porque el objeto Session está en el servidor
// El objeto Session es Null en el cliente

Session.clearPrivileges() // Limpia la sesión de sus antiguos privilegios
Session.setPrivileges("viewProducts")

Sesiones de procedimientos almacenados

En el servidor, todos los procedimientos almacenados comparten la misma sesión de usuario virtual.

Utilización

Puede compartir datos entre todos los procesos de una sesión de procedimiento almacenados utilizando el objeto compartido session.storage.

Disponibilidad

El objeto session de los procedimientos almacenados está disponible desde:

Sesiones autónomas

Una sesión independiente es la sesión de un solo usuario que se ejecuta cuando trabaja localmente con 4D.

Utilización

La sesión autónoma se puede utilizar para desarrollar y probar su aplicación cliente/servidor y su interacción con sesiones web y compartir OTP. Puede utilizar el objeto session en su código en sesión autónoma igual que el objeto session de las sesiones remotas.

Disponibilidad

El objeto session de una aplicación autónoma está disponible desde todos los métodos y código ejecutado en la aplicación 4D.