Hola,
Logico, cuando haces un session_start() abres el fichero de sesion y no se cierra hasta que se finaliza el script. Y session_start() espera hasta que ese fichero este cerrado para poder abrirlo. Asi se evita que un script modifique los datos de una sesion mientras la esta usando otro script.
Solucion a tu problema: session_write_close() (
http://www.php.net/manual/en/functio...rite-close.php)., justo despues de haber autentificado el acceso a la descarga y antes de mandar los datos del fichero.
Saludos.