Ver Mensaje Individual
  #22 (permalink)  
Antiguo 14/09/2007, 11:30
gabriel em
 
Fecha de Ingreso: diciembre-2004
Mensajes: 139
Antigüedad: 20 años, 4 meses
Puntos: 1
Re: Simular Global.asa ? se puede? desesperado !

Bueno, antes que nada les queira agradecer a todos los que aportaron con su granito de arena.
La verdad la solucion que voy a implementar no es ninguna novedad, es mas bien algo precario que no queria hacer porque crei que habia una forma mejor, pero como parece no haberla, opte por esta que es la menos complicada, y la explico para tratar de aportar algo , quien sabe por ahí le sirve a alguien:

Para hacer mas corto el ejemplo de lo que es en mi sitio supongamos que el usuario solo puede hacer 2 cosas, modificiar y eliminar.

Antes que nada creo en la Tabla de los articulos un campo que se llame “Ocupado”



AL MODIFICAR UN ARTICULO

1-Al entrar un usuario a modificar el articulo, primero se fija que este registro exista, sino existe es porque otro usuario acaba de borrarlo, pero como este usuario que esta modificando nunca actualizo la lista, es articulo seguia ahí, pero al haber sido borrado, lo mando a “hasidoborrado.asp”

2-Seguimos: Si existe el articulo a modificar, me fijo si la tabla Ocupado esta vacia.Si esta vacia, lo dejo continuar y pongo en la tabla Ocupado la fecha y hora de ese momento.

3-Al terminar de modificar , vacio nuevamente el registro Ocupado.

AL ELIMINAR UN ARTICULO

1-Me fijo que exista, porque otro lo puede haber eliminado recien.

2-Me fijo que no este opcupado, porque otro puede estar modificandolo mientras este lo quiere borrar.

3-Y si nadie lo esta usando, lo pongo como ocupado, asi mientras este se decide si borrarlo, nadie puede ponerse a borrarlo o modificarlo.




En pocas palabras: mientras estamos modificando o estamos por eliminar un articulo, el campo Ocupado tiene un valor, entonces nadie puede entrar hasta que terminemos lo que estamos haciendo y el campo Ocupado se vacie nuevamente.

Este sistema funciona a medias, justamente por el molestisimo caso en que alguien entre a modificar un articulo, este se ponga como ocupado y antes de terminar de modificarlo y que se ponga desocupado nuevamente, cierre la ventana del explorer o se le apague la computadora o le caiga un meteorito en el techo y lo desconecte de internet.

En este caso nunca se vacia el campo Ocupado, por lo tanto el articulo queda bloqueado para siempre...... lo cual no es bueno.....

No hay solucion perfecta, yo lo que hice es que pasados unos 20 minutos, si el campo de un articulo todavia esta ocupado, lo ignore y entre igual.
Justamente por eso cuando entra a modificar o eliminar, no pone un True o un False en el campo Ocupado, sino la fecha y hora.

Entonces lo unico que cambia es el paso 2:

2-Me fijo si el campo ocupado tiene algun valor, si no tiene ninguno me deja entrar.
En el caso de que si tenga un valor (una fecha con la hora) y esta hora sea de hace mas de 20 minutos, pasa igual, si todavia falta no lo deja pasar.

Uno puede pensar que debe ser muy molesto para un usuario tener que esperar 20 minutos para poder entrar, pero hay que tener que para que pase esto, las posibilidades son muy remotas, primero tienen que conectarse dos administradores al mismo tiempo, ademas tienen que querer modificar el mismo registro en el mismo momento y sumado a esto, el primer usuario que entro tiene que cerrar justo ahí la conexión con el sitio, es bastante improbable, aunque no imposible.

Cabe tambien aclarar: uno puede pensar que si el primer usuario en entrar es un lento y tarda mas de 20 minutos en terminar de modificar, el otro ya va a poder entrar y devuelta se presenta el error, pero eso se soluciona haciendo estos 20 minutos unos minutos mas largos que el session.timeout , asi cuando el segundo se pueda meter, el primero va a estar obligado a logearse nuevamente para poder entrar a modificar.

Bueno, es largo pero detallado, espero que a alguien le sirva en algun momento.