no he mirado tu codigo, solo por encima y lo de
header('Cache-Control: no-store, no-cache, must-revalidate');
No siempre funciona, la unica forma que he visto yo siempre de que recargue siempre la imagen, es haciendo creer al explorador, que es una imagen totalmente distinta.
Y como logramos esto? pues añadiendo un codigo de control a la hora de llamar a la imagen
por ejemplo
El explorador tomara como distintas estas imagenes :
captcha.gif?78919287
captcha.gif?12898129
Una solucion muy simple seria :
Código PHP:
$num1 = mt_rand(1,10000) ;
$num2 = mt_rand(1,10000) ;
$urlImagen = "captcha.gif?".$num1.$num2 ;
echo '<img src="'.$urlImagen."></img>" ;
A ver si esto te ayuda :P