Foro de elhacker.net

Programación => PHP => Mensaje iniciado por: Servia en 6 Febrero 2010, 13:19 pm



Título: Impedir la repetición de una acción?
Publicado por: Servia en 6 Febrero 2010, 13:19 pm
He estado buscando por google algo estilo sesiones que no permita al usuario repetir la acción por ejemplo de reenviar un formulario (eso de actualizar una vez enviado o que le de error y va y le permite hacer el envío de nuevo).

Diria que smf usa algo por el estilo


Título: Re: Impedir la repetición de una acción?
Publicado por: dimitrix en 7 Febrero 2010, 21:10 pm
A ver es sencillo, si te explicas un poquito mejor te intentaré ayudar...


Título: Re: Impedir la repetición de una acción?
Publicado por: Syphroot en 7 Febrero 2010, 22:10 pm
Pues como tu mismo lo has escrito, crea una variable de sesión cuando se realiza por primera vez la acción (envía datos en un form) y el código que recibe los datos que revise si ya existe esa variable (esta repitiendo la acción), si no, pues es la primera vez que se realiza. Me explico?

La otra opción es que cuando pulsen los botones de envio, los deshabilites con javascript (como una medida mas, mas no definitiva).


Título: Re: Impedir la repetición de una acción?
Publicado por: dimitrix en 7 Febrero 2010, 22:43 pm
Syphroot el problema es que tendría que decir para que es, por que si cada vez da una variable aleatoria no funcionaría ya que cada vez que envie esa acción tendría un valor distinto la variable aletoria y pasaría igualmente, por eso tiene que explicar el que.

Si lo haces por db (que es como tendrías que hacerlo) crea una tabl con las acciones tipo "borrar, editar, crear" y cargalo con "1" cuando lo hagan y si no quieres que vuelvan hacer alguna de esas tres acciones primero lees si el contenido de por ejemplo "editar" y con un "if" permites o no la acción mirando si tiene o no el "1" en editar.

Es como yo lo haría, esto me recuerda a lo del fotolog "Sólo una imagen por día, borrar todas las que quieras y editar sólo los 30 primeros minutos"

Un saludo, espero haber ayudado (espero xD)


Título: Re: Impedir la repetición de una acción?
Publicado por: Servia en 7 Febrero 2010, 23:19 pm
xD
Yo me refiero a que justo la hayan hecho no puedan repetirla, deban esperar, como aqui al postear, para evitar entradas multiples del mismo contenido a la db.


Título: Re: Impedir la repetición de una acción?
Publicado por: dimitrix en 7 Febrero 2010, 23:47 pm
xD
Yo me refiero a que justo la hayan hecho no puedan repetirla, deban esperar, como aqui al postear, para evitar entradas multiples del mismo contenido a la db.

Pues lo que te he puesto, pero en vez de uno, que guarde cuando se publicó con la función time() y si la diferencia entre los dos time es mayor a 30 segundos por ejemplo que le deje publicar.

Me entiendes?


Título: Re: Impedir la repetición de una acción?
Publicado por: Castg! en 8 Febrero 2010, 01:43 am
pero para uno seria muy facil borrar la cookie o sesison o lo que deje en tu pc, justamente la cosa no es dejarla en tu pc, sino del lado del servidor. podes hacer un filtro por ips.
conseguis la ip del cliente:
Código:
 $_SERVER['REMOTE_ADDR']
, y la guardas en un txt:
Código:
fwrite($ip."\n", $archivo);
luego cuando trate de volver a enviar el formulario abris el archivo:
Código:
$contenido = readfile($archivo); 
y terminas comprobando si ya guardaste su ip,
Código:
if(preg_match("/.*".$ip.".*/"))
. y listo


saludos!


Título: Re: Impedir la repetición de una acción?
Publicado por: fede_cp en 8 Febrero 2010, 02:16 am
pero la idea es que no te deje dentro de un determinado tiempo. no cuando cambia la ip, ya que la ip cambia por ejemplo cuando me desconecto y conecto. yl o que el quiere es por tiempo.


es como dice dimitrix.

pones con la funcion time que te saque el tiempo los comparas y si pasa determinada cifra es posible la modificacion o no.



saludos!


Título: Re: Impedir la repetición de una acción?
Publicado por: Castg! en 8 Febrero 2010, 02:35 am
le guardas tambien la hora y dia y despues la comparas, lo mismo


Título: Re: Impedir la repetición de una acción?
Publicado por: Syphroot en 10 Febrero 2010, 07:18 am
Completamente de acuerdo dimitrix, fede_cp, Castg! asociando un timestamp a la acción (sería como ir "logeando" lo que hace el usuario) incluso tendrías que comparar contenido (por lo que he entendido)... porque puede suceder el caso que no pasen ni 30 segundos por ejemplo (o menos para los veloces del teclado) y haga otra vez la misma acción pero con "contenido" diferente. Si... emmm, ¿De que trata tu app?

Saludos a todos!


Título: Re: Impedir la repetición de una acción?
Publicado por: Servia en 12 Febrero 2010, 23:17 pm
Subir información, el problema esque cuando hay algun error o se ha enviado correctamente, cuando el user acatualiza puede remandar la info que sin mas ni menos se ingresa.

Probaré con lo que me habeis dicho, muchas gracias.


Título: Re: Impedir la repetición de una acción?
Publicado por: dimitrix en 13 Febrero 2010, 00:42 am
Entiendo, entonces usa un identificador con el rand() por ejemplo y que mire en la db si ya existe y si existe pues que no lo guarde.

Un saludo!


Título: Re: Impedir la repetición de una acción?
Publicado por: WHK en 13 Febrero 2010, 00:48 am
Esque smf tiene un sistema similar pero utiliza la misma sesión de la persona logueada, guarda tu id de usuario mas tu ip en un log llamado flood y te hace una comparación de tiempo entre tu última acción, ahora... puedes regularizar eso atraves de su cookie o ip pero recuerda que ambas cosas son bypaseables, o sea que ambas cosas pueden ser evadidas.

Lo que puedes hacer es ponerle una captcha al form, de esa forma si alguien quiere enviar mil formularios tendrá que ingresar mil captchas y eso es practicamente imposible a menos que la captcha sea muy debil y sea bypaseable por algún sistema OCR.

Te recomiendo que uses recaptcha y con eso solucionas todos los problemas ya que siempre hay un intervalo considerable entre que cargas la web, ingresas el captcha y envías el form y te ahorras la base de datos, el log, etc etc.


Título: Re: Impedir la repetición de una acción?
Publicado por: Servia en 13 Febrero 2010, 13:08 pm
No me gusta demasiado usar recaptcha porque a mi me molesta tener que escribir más para hacer lo mismo. De todos maneras parece mas versatil.