martes, 7 de noviembre de 2006

Sesiones de usuario en Velneo (i)

Veamos cómo montar una web en Velneo con control de visitas y acceso a zona privada.

Lo primero será la estructura de tablas.

Vamos a necesitar una tabla de USUARIOS donde almacenar los usuarios que tienen permiso para acceder a la zona privada de la web.

La estructura de esta tabla será, por ejemplo:

Campo CODIGO numérico de la longitud necesaria con contenido inicial siguiente al último
Campo NOMBRE para almacenar el nombre real completo del usuario autorizado
Campo RAZON-SOCIAL para almacenar la empresa del usuario autorizado
Campo USUARIO para almacenar el nombre de usuario autorizado
Campo CONTRASENYA para almacenar la contraseña del usuario autorizado

Montaremos los índices de clave única necesarios para que no se puedan repetir el mismo NOMBRE y RAZON-SOCIAL, ni el mismo USUARIO y CONTRASENYA, o ni el mismo USUARIO, ni la misma CONTRASENYA.

Vamos a necesitar también una tabla NAVEGANTES donde almacenaremos las visitas únicas a la web.

La estructura de esta tabla será, por ejemplo:

Campo CODIGO numérico de la longitud necesaria con contenido inicial siguiente al último
Campo USUARIO enlazado a la tabla de datos maestra USUARIOS
Campo FECHA de tipo fecha con contenido inicial fHoy(), para almacenar la fecha de inicio de sesión de ese NAVEGANTE
Campo HORA de tipo hora con contenido inicial fAhora(), para almacenar la hora de inicio de sesión de ese NAVEGANTE

Si además queremos controlar el histórico de movimientos a través de la web de los diferentes NAVEGANTES, montaremos una tabla VISITAS que será submaestra de NAVEGANTES.

La estructura de esta tabla será, por ejemplo:

Campo NAVEGANTE enlazado a la tabla de datos maestra NAVEGANTES
Campo CODIGO numérico de la longitud necesaria con contenido inicial siguiente al último
Campo PAGINA donde almacenaremos la referencia de la página visitada (si utilizamos un sistema parecido al de vWeb, será el código de página)
Campo FECHA de tipo fecha con contenido inicial fHoy(), para almacenar la fecha de la visita a la página en cuestión
Campo HORA de tipo hora con contenido inicial fAhora(), para almacenar la hora de la visita a la página en cuestión

Lo segundo será la estructura html de la web.

Para empezar usaremos un refinamiento que permitirá que nuestra página inicial por defecto en vez de ser una página PAG sea un proceso PRO.

Esto lo conseguiremos haciendo que nuestra página INDEX.PAG defina una estructura de frames como la siguiente:

[html]
[head]
[title]Título de la web (muy importante)[/title]
[meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"]
[meta name="keywords" content="palabras por las que queremos aparecer en los buscadores separadas por espacios"]
[meta name="description" content="Breve descripción de la web. Este es el párrafo resumen que aparece en los buscadores"]
[/head]
[frameset border="0" framespacing="0" frameborder="0" cols="100%,*"]
[frame src="INDEX.PRO" name="web" frameborder="0" framespacing="0" noresize]
[/frameset]
[noframes]
[body bgcolor="#FFFFFF"]
Su navegador no soporta frames. Actualice su versión.
[/body]
[/noframes]
[/html]

Como veis definimos un frameset con dos columnas; la primera del 100% de ancho y la otra del resto, es decir, nada, y como contenido de la primera columna ponemos el INDEX.PRO

Así conseguimos varios efectos colaterales:

1.- Tener una página inicial que es un proceso y no una página. En un proceso podemos hacer lo que queramos, una página es html "tonto".

2.- Escondemos toda la web dentro de un frame. La dirección en la barra del navegador siempre mostrará el título de la página principal y no se verán cosas

raras ni incómodas como la ip de nuestro servidor, la pasarela cgi de Velneo, los nombres de los procesos y las variables globales que manejamos.

3.- Si tenemos nuestro dominio.com contratado en un servidor externo, la redirección será siempre la misma; http://ip_servidor/cgi-vel/alias_aplicacion/ y no deberemos apuntar a una INDEX.PAG o un INDEX.PRO

4.- Por aquí sólo se pasará una vez en cada sesión, al conectar por primera vez con nuestra web, el resto de veces, desde cualquier punto interno de la web, iremos directamente al INDEX.PRO

Ahora, de momento, sólo queda ver cómo es el proceso inicial INDEX.PRO

En este proceso veremos si hay un NAVEGANTE o no. Si lo hay (el usuario procede del interior de la web), lo conservaremos, y si no lo hay (el usuario procede del exterior de la web), lo daremos de alta.

Para ello usaremos una variable global NAV en memoria independiente para cada tarea en segundo plano accesible web de tipo numérico con la misma longitud que el campo CODIGO de la tabla de NAVEGANTES.

El proceso puede ser algo como:

Rem-] Inicializamos la página html
Set-] pagina,""
Rem-] Recibimos el Navegante
Set-] navegante,$NAV$
Rem-] Comprobamos si viene de fuera o de dentro
if-] fCampoVacio('navegante')
Rem-] Viene de fuera
Rem-] y le asignamos un Navegante
Alta directa-] NAVEGANTES
Pre
Libre
Post
Set-] navegante, %CODIGO%
Rem-] Apuntamos la visita
Alta directa-] VISITAS
Pre
Modificar campo-] NAVEGANTE, 'navegante'
Modificar campo-] PAGINA, "Entrada a la web"
Post
Libre
Rem-] Componemos la página, pasando el parámetro 'navegante'
Html: ejecutar componente-] pagina, INDEX, 'navegante'
Rem-] Devolvemos la página
Añadir retorno texto-] 'pagina'

Analicemos el proceso en profundidad.

Lo primero que hacemos es inicializar la variable local 'pagina' que es la que contendrá el resultado de ejecutar el componente html que compondrá la página html. Es conveniente hacer siempre esta inicialización.

Pasamos el contenido de la variable global NAV a la variable local 'navegante' y comprobamos si está vacía con la función fCampoVacío(). Si está vacía quiere decir que esta visita viene de fuera de nuestra web y le asignamos un NAVEGANTE mediante alta directa en la tabla NAVEGANTES. Si no está vacía, quiere decir que esta visita proviene del interior de nuestra web, y conservamos su valor.

Apuntamos la visita a esta página mediante alta directa en la tabla VISITAS, especificando el NAVEGANTE y la página visitada.

Ahora ejecutamos el componente html INDEX que compondrá nuestra web, pasándole el parámetro 'navegante', y devolvemos como resultado la página html.

Con esto hemos conseguido que, a partir de aquí, cualquier visita a nuestra web tenga asignado un NAVEGANTE que arrastraremos por el resto de páginas de la web, pasándolo siempre como parámetro.

En el momento en que un usuario haga login positivo podemos apuntar el USUARIO en la tabla NAVEGANTES y de ahí en adelante ya lo tenemos identificado en cualquier página de la web.

En una próxima entrega, espero que muy pronto, seguiremos con este desarrollo para completar el login, ver la posibilidad de la caducidad de las sesiones de usuario, y hacer un estudio completo del histórico de visitas a nuestra web.

Hasta pronto!!

1 comentario: