Re: Ejecución automática por tiempo de procedimientos.

From: Pablo Braulio <brulics(at)gmail(dot)com>
To: Gunnar Wolf <gwolf(at)gwolf(dot)org>
Cc: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: Ejecución automática por tiempo de procedimientos.
Date: 2007-12-11 17:14:36
Message-ID: 475EC57C.8070209@gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

>
> ¿Permites una sóla sesión por usuario, o varias? Bueno, te muestro acá
> lo que yo haría para una sóla - extenderlo es trivial (y recomendable)
> ;-)
>
> CREATE TABLE usuario (
> id serial PRIMARY KEY,
> login text NOT NULL UNIQUE,
> passwd char(32) NOT NULL,
> nombre text,
> sesion char(32),
> sesion_inicio timestamp default now()
> );
>
> Te conviene crear un índice sobre el campo sesion, pues estaremos
> haciendo búsquedas sobre de él. A este campo y a passwd le pongo una
> longitud fija (no son text como los demás), porque guardo ahí la
> salida de md5, que es siempre de 32 caracteres. Tu implementación
> puede variar.
>
> Puedes tener una tabla con la configuración del sistema, por ejemplo,
> para poder ajustar la duración de tus sesiones - por ahora, lo
> limitamos a 10 minutos en duro.
>
> Ahora, en vez de intentar validar la sesión del usuario desde tu PHP,
> mejor llama a la función sesion_valida() - No va probada, pero es algo
> como esto:
>
> CREATE OR REPLACE FUNCTION sesion_valida(text) RETURNS integer AS
> $$
> DECLARE
> la_sesion ALIAS FOR $1;
> duracion interval;
> user_id integer;
> BEGIN
> duracion = '10 min'::interval
> -- Antes de otra cosa, vaciamos todas las sesiones expiradas
> UPDATE usuario SET sesion=NULL WHERE sesion_inicio+duracion < now();
> -- Buscamos a qué usuario pertenece esta sesión
> SELECT INTO user_id id FROM usuario WHERE sesion = la_sesion;
> RETURN la_sesion;
> END;
> $$ LANGUAGE 'plpgsql';
>
> ¿Te gusta? Claro está, es _mucho_ más eficiente (especialmente si
> tienes cantidades grandes de usuarios) que crees una tabla
> independiente para sesiones. Pero bueno, ahí ya te resolví la tarea de
> cómo permitir más de una sesión por usuario. Claro, queda otra (muy
> trivial) de cómo limitarlo ;-)
>
> Saludos,
>

Hola.

Lo que pretendo es limitar el acceso de los usuarios a una sóla sesión.
Es decir que un usuario sólo pueda iniciarla una sóla vez
simultaneamente, que el mismo usuario no esté trabajando en dos sitios
al mismo tiempo.

Espero haberme explicado bien.

Viendo la tabla que creas, tengo la duda de que almacenas en el campo
sesion. ¿el identificador de la sesion de php?. :-(

Luego, ¿como ejecutas la función?. Perdona pero estoy muy verde con las
funciones.

Gracias por la ayuda.
- --

< ¡¡Nos vemos!! >
----------------------------
\
\
.::!!!!!!!:.
.!!!!!:. .:!!!!!!!!!!!!
~~~~!!!!!!. .:!!!!!!!!!UWWW$$$
:$$NWX!!: .:!!!!!!XUWW$$$$$$$$$P
$$$$$##WX!: .<!!!!UW$$$$" $$$$$$$$#
$$$$$ $$$UX :!!UW$$$$$$$$$ 4$$$$$*
^$$$B $$$$\ $$$$$$$$$$$$ d$$R"
"*$bd$$$$ '*$$$$$$$$$$$o+#"
"""" """""""
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.6 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org

iD8DBQFHXsV8K7lGsMchFswRAqEqAJ4wLyvwCqWAGGOBCNyhfzFyk1RnsACgve/5
B+gRhGVj5wTDvaU13Xb3iBw=
=1P4I
-----END PGP SIGNATURE-----

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message James Alonso Barrientos Santos 2007-12-11 17:26:46 RE: Error al crear BD en una transaccion
Previous Message Marcelo Retamal Vallejos 2007-12-11 17:00:14 Problemas con postgresql-libs