![]() |
![]() |
| Paypal | FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
#2
|
||||
|
||||
|
Hola shoulder.
Se me ocurre que podrías usar una solución basada en eventos. Hice un ejemplo el cuál deberías modificar para que los datos se tomen de la tabla de usuarios en la creación. Además en la renovación del tiempo, evaluar que el usuario realize alguna acción. (yo lo hice pulsando un botón como prueba) Algo como: Código:
interface
...
type
TUsuario = class;
TEventoFinSesion = procedure (User: TUsuario) of object;
TUsuario = class
private
FNombre: string;
FPasswd: string;
FTiempoInactivo: TTime;
FTimer: TTimer;
procedure TiempoAgotado(Sender: TObject);
public
EventoFinSesion : TEventoFinSesion;
constructor Create(ANombre,APasswd: string);
destructor Destroy; override;
property Nombre: string read FNombre write FNombre;
property Passwd: string read FPasswd write FPasswd;
procedure RenewTime;
end;
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
public
procedure InitTimeUsr(Sender: TObject);
procedure UsuarioFuera(Usr: TUsuario);
end;
var
Form1: TForm1;
Usuario: TUsuario;
implementation
{ TUsuario Create }
constructor TUsuario.Create(ANombre, APasswd: string);
begin
FNombre:= ANombre;
FPasswd:= APasswd;
FTiempoInactivo:= Time;
FTimer:= TTimer.Create(nil);
with FTimer do
begin
Enabled:= False;
Interval:= 1000*60*90; // 90 minutos
OnTimer:= TiempoAgotado;
Enabled:= True;
end;
end;
{ TUsuario Destroy }
destructor TUsuario.Destroy;
begin
FTimer.Free;
inherited Destroy;
end;
{ TUsuario Renovar tiempo }
procedure TUsuario.RenewTime;
begin
FTiempoInactivo:= Time;
with FTimer do
begin
Enabled:= False;
Interval:= 1000*60*90; // otros 90 minutos
Enabled:= True;
end;
end;
{ TUsuario Tiempo agotado }
procedure TUsuario.TiempoAgotado(Sender: TObject);
begin
FTimer.Enabled:= False;
if Assigned(EventoFinSesion) then
EventoFinSesion(Self);
end;
Código:
{ Inicia sesion }
procedure TForm1.InitTimeUsr(Sender: TObject);
begin
Usuario:= TUsuario.Create('JUAN', '123');
Usuario.EventoFinSesion:= UsuarioFuera;
end;
{ Prueba, ingreso del usuario }
procedure TForm1.Button1Click(Sender: TObject);
begin
InitTimeUsr(Self);
end;
{ Tiempo inactivo cumplido }
procedure TForm1.UsuarioFuera(Usr: TUsuario);
begin
ShowMessage('El usuario '+Usr.Nombre+
'inactivo durante 90 min. Sesión terminada');
Usr.Free;
end;
{ Realizó alguna operacion, se le conceden 90 min + }
procedure TForm1.Button2Click(Sender: TObject);
begin
Usuario.RenewTime;
end;
Saludos.
__________________
Daniel Didriksen Guía de estilo - Uso de las etiquetas - La otra guía de estilo .... Última edición por ecfisa fecha: 29-07-2010 a las 22:25:41. |
| Herramientas | Buscar en Tema |
| Desplegado | |
|
|
Temas Similares
|
||||
| Tema | Autor | Foro | Respuestas | Último mensaje |
| seguridad app | kikin | Varios | 1 | 11-02-2009 10:34:27 |
| La seguridad. | marcoszorrilla | La Taberna | 1 | 12-05-2008 09:22:52 |
| Seguridad | Lupita | Varios | 6 | 29-08-2007 03:38:54 |
| Seguridad en asp.net | karocs | .NET | 3 | 07-02-2007 16:41:40 |
| [Seguridad] Nuevos agujeros de seguridad en varios sistemas Windows ... | kinobi | Noticias | 1 | 16-09-2003 10:42:54 |
|