Descargar – max conexiones por usuario?

Tengo un php-script que permite al usuario descargar archivos de gran tamaño con el currículum de descargas.

Esto funciona bien pero he limitado la velocidad de descarga con php-code a 200kb / s por conexión.

Por lo tanto, el administrador de descargas de Mozillas Firefox solo hace una conexión y la velocidad es de alrededor de 200kb / s, pero Free Download Manager o JDownloader realiza de 2 a 4 conexiones y entonces la velocidad de descarga es de 200 Kb / s * 2 o 4. 800 kb / s

¿Cómo puedo detener esto y permitir solo una conexión por cada usuario para descargar este archivo?

A Creo que lo primero para ti es deshabilitar Content-Range

14.16 Rango de contenido

El encabezado de la entidad de rango de contenido se envía con un cuerpo de entidad parcial para especificar en qué parte del cuerpo de entidad completo debe aplicarse el cuerpo parcial. Las unidades de rango se definen en la sección 3.12.

El administrador de descarga puede descargar una sola multa en 2 o múltiples conexiones debido al rango … si deshabilita esto, tanto la download resume como multiple connections no se pueden realizar en un solo archivo. harían que todas las solicitudes al archivo comenzaran desde el principio

Ejemplo

 LoadModule headers_module modules/mod_headers.so Header set Accept-Ranges none RequestHeader unset Range 

También debería mirar Rangos de 14.35.1 Byte

B. Presentar Sesiones de descarga.

Puede generar una uniqid id para cada descarga y servirla a través de la página PHP. Si la descarga aún está activa o se ha solicitado antes de que simplemente exista la página

Ejemplo

 $realFile = "test.pdf"; $fakeFile = uniqid("file"); $uniqid = isset($_REQUEST['id']) ? $_REQUEST['id'] : null; if (empty($uniqid) || strlen($uniqid) < 20 || !ctype_xdigit($uniqid)) { die("Die! Die! Die! Stolen URL"); } $memcache = new \Memcache(); $memcache->connect('localhost', 11211); $runtime = (int) $memcache->get($uniqid); if ($runtime) { die("Die! Die! Die! You Multiple Down loader"); } else { header("Expires: Mon, 26 Jul 1997 05:00:00 GMT\n"); header("Last-Modified: " . gmdate("D, d MYH:i:s") . " GMT"); header("Content-Transfer-Encoding: binary"); header("Content-disposition: attachment; filename=$fakeFile.pdf"); // header('Content-type: application/pdf'); header("Content-length: " . filesize($realFile)); readfile($realFile); $memcache->set($uniqid, 1); } 

Cliente simple

 $url = "a.php?id=" . bin2hex(mcrypt_create_iv(30, MCRYPT_DEV_URANDOM)); printf("Download Here",$url); 

Saldría algo así como

 Download Here 

También necesita asignar cada identificación a un archivo en particular …