es gibt eine möglichkeit den broswer-chache zu deaktivieren !
mit php (auszug von dr web)
<?php
session_start();
// Cache deaktivieren
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header("Last-Modified: " . gmdate("D, d M Y H:i:s") ." GMT");
header("Pragma: no-cache");
header("Cache-Control: no-store, no-cache, max-age=0, must-revalidate");
// Challenge-ID
mt_srand((double)microtime()*1000000);
$random = mt_rand();
$random = md5(uniqid($random,TRUE));
$sess_challenge_id = $random;
if(!session_is_registered("sess_challenge_id")):
session_register("sess_challenge_id");
endif;
// Grafik auslesen
$pic = "tolle-grafik.jpg";
$img = @GetImageSize("/absoluter/pfad/zu/verzeichniss/images/".$pic);
$width = $img[0];
$height = $img[1];
// HTML-Tabelle anzeigen
printf("<table border="0" cellpadding="0" cellspacing="0" width="%s" height="%s">\n",$width,$height);
print "<tr>\n";
printf("<td width="%s" height="%s" background="read_image.php?img=%s&challenge=%s">",$width,$height,rawurlencode($pic),$sess_challenge_id);
printf("<img border="0" src="blind.gif" width="%s" height="%s">",$width,$height);
print "</td>\n";
print "</tr>\n";
print "</table>\n";
?>
Erklärung:
Als allererstes müssen Sie eine Session starten. Danach deaktivieren Sie sicherheitshalber noch den Cache und erzeugen eine 32 Zeichen lange "Challenge-ID". Solche Challenge-ID's kann man übrigens auch gut verwenden, um beispielsweise Reloads zu erkennen. Diese Challenge-ID registrieren wir als Session-Variable. Nun müssen Sie nur noch mit GetImageSize() die Grösse der Grafik auslesen.
Nun kommt der eigentliche Trick: Anstatt die Grafik direkt einzusetzen, starten wir dagegen ein zweites Script "read_image.php" und hängen als GET-Parameter den Namen der Grafik-Datei und unsere Challenge-ID hinten dran.
3. Grafik auslesen:
Nun benötigen Sie ein zweites Script, um Ihre Grafik aus dem geschützten Verzeichnis auszulesen. Der Quellcode dazu sieht folgendermaßen aus:
<?php
session_start();
// Challenge-ID OK -> Bild anzeigen
if(session_is_registered("sess_challenge_id") and $sess_challenge_id == $challenge):
session_unregister("sess_challenge_id");
$path = "/asoluter/pfad/zu/verzeichniss/images/";
$img = rawurldecode($img);
$read = @GetImageSize($path.$img);
$type = $read[2];
// Nun bestimmen wir den Datei-Typ, damit wir dem Browser sagen können
// welcher Grafik-Typ er nun vorgeschmissen bekommt
switch($type)
{
case 1:
$mime = "image/gif";
break;
case 2:
$mime = "image/jpeg";
break;
case 3:
$mime = "image/png";
break;
case 4:
$mime = "application/x-shockwave-flash";
break;
}
// Nun senden wir die Header und lesen mit readfile() unsere
// Grafik aus und senden diese direkt an den Browser
header("Content-Type: $mime");
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header("Last-Modified: ".gmdate("D, d M Y H:i:s")." GMT");
header("Pragma: no-cache");
header("Cache-Control: no-store, no-cache, max-age=0, must-revalidate");
readfile($path.$img);
// Unerlaubter Zugriff -> Transparentes GIF *ätsch*
else:
header("Content-type: image/gif");
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header("Last-Modified: " . gmdate("D, d M Y H:i:s") ." GMT");
header("Pragma: no-cache");
header("Cache-Control: no-store, no-cache, max-age=0, must-revalidate");
readfile("blind.gif");
endif;
?>
!!!!!