Philipp Hasenfratz: cgi mit <img src... in html einbinden

Beitrag lesen

Halihallo Alain

Kann es sein dass das script desswegen nur einmal ausgerufen wird,weil das script
eine print ausgabe zur bestätigung an den browser ausgibt?

Nein, es liegt wie gesagt am Cache.

Ich habe auch versucht eine meta angabe im html zu machen mit no cache oder expires=0

Nein, die Cache-Eigenschaften muss das Script selber generieren,
ansonsten definierst du das Caching-Verhalten der HTML Seite, nicht
des "CGI-Bildes".

Gib im CGI-Script inetwa einfach folgende Header aus:
print 'Content-Type: image/gif';
print 'Cache-control: private, no-cache, must-revalidate'."\015\012";
print 'Expires: Sat, 01 Jan 2000 00:00:00 GMT'."\015\012";
print 'Date: Sat, 01 Jan 2000 00:00:00 GMT'."\015\012";
print "\015\012";
print "<eingelesene-1x1-image-datei>";

Dies genügt in den meisten Fällen das Caching des CGI-Scripts zu
unterbinden.

aber das geht so auch nicht.Wenn ich den temporary cache vom IE angucke dann sehe ich die print ausgabe
vom script.

Nun, es gibt noch eine weitere Möglichkeit das Caching möglichst zu
unterbinden:
Füge per JavaScript immer eine Timestamp oder Zufallszahl an die
Image-URL an.

<script type="text/javascript">
  var rdm = Math.random()*9999;
  document.write('<img src="/cgi-bin/script.pl?rdm='+rdm+'" width="1" height="1">');
</script>
<noscript>
  <img src="/cgi-bin/script.pl" width="1" height="1">
</noscript>

Falls der Client Javascript unterstützt, wird automatisch der
Javascript-Teil ausgeführt und die Image-URL durch die Zufallszahl
rdm erweitert. Somit meint der Browser, dass es sich immer um ein
anderes Script handelt und es wird somit immer neu geladen. Falls
der Client kein Javascript unterstützt, wird der <noscript>-
Container ausgeführt und selbst bei ausgeschaltenem Javascript ist
die Wahrscheinlichkeit gross (mit den obengenannten Headern), dass
das Script geladen wird.

Würde es vielleicht (jedesmal) funtzen wenn ich im script keine print ausgabe schreibe?

Das hat absolut nichts damit zu tun.

BTW: Falls du einen Counter oder etwas ähnliches erstellen möchtest,
ist das Vorgehen "legitim". Falls du jedoch nur ein Script an einer
bestimmten Zeit starten möchtest, wäre dies über einen Cron-job
sinnvoller umzusetzen.

Viele Grüsse

Philipp