[SOLUCIONADO] Limitar descargas por usuario

Iniciado por ANTRAX, Abril 20, 2013, 11:16:35 AM

Tema anterior - Siguiente tema

0 Miembros y 1 Visitante están viendo este tema.

Abril 20, 2013, 11:16:35 AM Ultima modificación: Octubre 25, 2013, 11:12:32 PM por Expermicid
Hola a todos. Queria saber si alguno sabe como puedo limitar las descargas por usuarios en un website.
Por ejemplo. Subo una carpeta llena de PDF, pero no quiero que los usuarios descarguen mas de a 2 por vez...
Como limitaria eso?

Saludos!
ANTRAX


Podemos hacer un filtro por ip o por cookie tipo session. Por cookie es fácil traspasarlo, solo necesito borrar la cookie y listo, puedo descargar lo que quiera (aun que es la manera mas rápida). La otra forma seria tener una tabla en una base de datos con las ips, la fecha de su ultima descarga y la cantidad de veces descargada (entre 1 y 2 solamente prácticamente).

Base de datos: Tabla: "IPs"
[ip : string]
[fecha_ultima_descarga : datetime]
[cantidad:int (auto increment?)]

No es muy complejo hacerlo en PHP.  Tenemos los archivos a descargar en una carpeta que no se puede acceder desde la web y cuando alguien quiere descargar cierto archivo vamos a la tabla, buscamos su ip si existe, (sino la agregamos), vemos si la fecha del ultimo archivo que descargo y si no es hoy, volvemos el valor de "cantidad a 0", luego si "cantidad" es mayor o igual a 2 no podemos descargar, de lo contrario agregamos cantidad = cantidad + 1.
Archivos:
descarga.php <-- Archivo que lista y fuerza la descarga de los dentro de carpeta
carpeta/ :  <-- Bloqueada por htaccess
                 - archivo1.pdf
                 - archivo2.pdf
                 - archivo3.pdf

Claro que uno puede cambiarse la ip... pero contra eso no existe mucho que hacer ..


No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Si tienes un sistema de usuarios que deben loguear para descargar lo que se me ocurre es que cuando logueen chequen la fecha actual de su ultimo login, y si su ultimo login es diferente a la fecha actual reseteamos su cantidad en 0 y actualizamos la fecha a la actual.

Y a la hora de descargar checamos su cantidad si es menor a 2 le descarga el archivo y le aumenta la cantidad en 1, y ya.

Se me habian ocurrido otras formas usando localstorage, pero igual era facil hacer bypass al igual que hacer uso de IPs que se pueden cambiar o en uso de localstorage limpiar los datos del navegador ... hehehe, pero ya por usuario supongo que seria lo mas eficiente, o asi lo veo yo hehehe

Tal como dice isseu la unica forma de limitar las descargas por usuario sería primero utilizando la sesión de usuario y no hay otra que usando la misma base de datos de esa sesión, por ejemplo php.

Desde mod_rewrite puedes crear una regla donde todas las peticiones por ejemplo a descargas/*.pdf se redireccionen de forma interna (como si se tratase de un permalink) hacia ese php y desde ahi controlar la sesión y dar el archivo en trocitos de 2kb para no hacer uso excesivo de la memoria ram.

La desventaja es que si descargas algo que demore por ejemplo 3 minutos en bajar entonces tendrás un proceso tomado durante ese tiempo, si hay 50 personas bajando un archivo entonces tendrás 50 procesos activos y puede que apache te de un error 500 al sobrepasar la cantidad maxima de procesos hijo de php.

Dale una vuelta a eso porque de otra forma tendrias que compilar algún mod para apache y no creo que te des ese trabajo.

Saludos.
- No tienes permitido ver los links. Registrarse o Entrar a mi cuenta - No tienes permitido ver los links. Registrarse o Entrar a mi cuenta