![]() |
![]() |
| Paypal | FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
#1
|
|||
|
|||
|
Seguridad
En realidad no es esta una pregunta estricta de programación, pero termine una aplicacición en delphi y estoy haciendo toda la parte de seguridad dentro de la aplicación, Password para el usuario, no menos de 6 digitos, clave para la BD, graba en una tabla el ultimo acceso de cada usuario, niveles de acceso. Lo que no me esta saliendo y estoy intentando, si un usuario esta dentro del programa mas de 90 minutos inactivo que lo desconecte.
Gracias, |
|
#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. |
|
#3
|
||||
|
||||
|
Cita:
Saludos!
__________________
delphi.com.ar Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
|
|
#4
|
||||
|
||||
|
¿Has probado el componente Inactivityapp de Neftalí?
Te cierra la aplicación en el tiempo que tú decidas. Lo puedes descargar desde este link: http://neftali.clubdelphi.com/?p=265 Salu2 y ojalá te sirva |
|
#5
|
|||
|
|||
|
Seguridad
Hola a todos, primero gracias por las respuestas, el componente lo use y me funcionaba de a momentos, me llamaban los usuarios que en algunos casos entraban y al segundo les cerraba el programa. Estoy usando como base de datos MYSQL con conexion Zeos y delphi.
|
|
#6
|
|||
|
|||
|
Seguridad
Hola, me funciono el InactivityApp1 pero solo un problema, quando hace el conteo interno de tantos milisegundos, para chequear si llega al maximo de inactividad es como que hace una transicion entre la flecha del mouse y el reloj de arena y es incomodo porque el usuario trabaja por ejemplo en el word y ve un instante como cambia flecha por reloj. Hay manera de ocultar esto?.
Gracias. |
|
#7
|
||||
|
||||
|
MySql posee una variable de entorno en el servidor llamada interactive_timeout donde puedes configurar el tiempo que mantiene viva una conexión sin actividad.
http://dev.mysql.com/doc/refman/5.0/...active_timeout Saludos!
__________________
delphi.com.ar Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
|
![]() |
|
|
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 |
|