Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 29-07-2010
shoulder shoulder is offline
Miembro
 
Registrado: abr 2008
Posts: 441
Poder: 17
shoulder Va por buen camino
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,
Responder Con Cita
  #2  
Antiguo 29-07-2010
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
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;
LLamadas:
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;
Espero que la idea te sirva.

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.
Responder Con Cita
  #3  
Antiguo 29-07-2010
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 27
delphi.com.ar Va por buen camino
Cita:
Empezado por shoulder Ver Mensaje
Lo que no me esta saliendo y estoy intentando, si un usuario esta dentro del programa mas de 90 minutos inactivo que lo desconecte.
¿Qué motor y tipo de conexión a la RDBMS estas usando?.. Hay algunos servidores que ya tienen ese tipo de seguridad, y simplemente puedes pasarle el parámetro en el string de conexión.

Saludos!
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #4  
Antiguo 29-07-2010
Avatar de radenf
radenf radenf is offline
Miembro
 
Registrado: oct 2007
Ubicación: Viña del Mar,Chile
Posts: 608
Poder: 17
radenf Va por buen camino
¿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
Responder Con Cita
  #5  
Antiguo 30-07-2010
shoulder shoulder is offline
Miembro
 
Registrado: abr 2008
Posts: 441
Poder: 17
shoulder Va por buen camino
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.
Responder Con Cita
  #6  
Antiguo 30-07-2010
shoulder shoulder is offline
Miembro
 
Registrado: abr 2008
Posts: 441
Poder: 17
shoulder Va por buen camino
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.
Responder Con Cita
  #7  
Antiguo 30-07-2010
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 27
delphi.com.ar Va por buen camino
Cita:
Empezado por shoulder Ver Mensaje
Estoy usando como base de datos MYSQL con conexion Zeos y delphi.
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.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

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


La franja horaria es GMT +2. Ahora son las 12:46:18.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi