cgi mit <img src... in html einbinden
Alain
- perl
Hallo,
ich habe das einbinden von cgi in html in selfhtml gelesen,jedoch ist das
für meine methode nicht so notwendig,da das script eigentlich mit
<img src="script.cgi" height=1 width=1> funtzt.
Das problem dabei ist es funtzt nur einmal beim aufruf der html seite.
Es sollte jedoch immer ausgeführt werden,wenn die seite jedesmal aufgerufen wird.
Nun meine frage dazu:
Kann es sein dass das script desswegen nur einmal ausgerufen wird,weil das script
eine print ausgabe zur bestätigung an den browser ausgibt?
Ich meine eigentlich ist das auch nicht notwendig nur dann wenn man das script
direkt mit dem browser aufruft.
Ich habe auch versucht eine meta angabe im html zu machen mit no cache oder expires=0
aber das geht so auch nicht.Wenn ich den temporary cache vom IE angucke dann sehe ich die print ausgabe
vom script.
Würde es vielleicht (jedesmal) funtzen wenn ich im script keine print ausgabe schreibe?
Gruss vom Alain
Moin!
<img src="script.cgi" height=1 width=1>
Kann es sein dass das script desswegen nur einmal ausgerufen wird,weil das script
eine print ausgabe zur bestätigung an den browser ausgibt?
Wenn du das Skript wie oben angegeben als Bild einbindest, dann muß das Skript ein gültiges Bild zurückliefern, damit der Browser kein "broken image" Icon anzeigt.
Außerdem wird dein Skript nur aufgerufen, wenn der Browser Bilder lädt, und diese außerdem nicht schon aus dem Cache holt, sondern tatsächlich beim Server nachfragt.
- Sven Rautenberg
Hallo,
<img src="script.cgi" height=1 width=1>
Kann es sein dass das script desswegen nur einmal ausgerufen wird,weil das script
eine print ausgabe zur bestätigung an den browser ausgibt?Wenn du das Skript wie oben angegeben als Bild einbindest, dann muß das Skript ein gültiges Bild zurückliefern, damit der Browser kein "broken image" Icon anzeigt.
ja der server führt das script auch aus,was eigentlich das wichtigste ist und nicht was der client anzeigt.
In der html ausgabe sieht man nur einen kleinen punkt 1 pixel gross.
Außerdem wird dein Skript nur aufgerufen, wenn der Browser Bilder lädt, und diese außerdem nicht schon aus dem Cache holt, sondern tatsächlich beim Server nachfragt.
eben das ist ja das problem,das möchte ich so nicht,desshalb meine frage,ist es vielleicht möglich wenn das script gar nichts (cgi ohne print ausgabe) an den browser sendet?
Gruss vom Alain
Moin!
Wenn du das Skript wie oben angegeben als Bild einbindest, dann muß das Skript ein gültiges Bild zurückliefern, damit der Browser kein "broken image" Icon anzeigt.
ja der server führt das script auch aus,was eigentlich das wichtigste ist und nicht was der client anzeigt.
Wozu bindest du es dann überhaupt ein? Es ist offenbar kein Bildausgabescript.
Informiere dich über die Möglichkeiten von SSI. Damit kann man Scripte ausführen, wenn HTML-Seiten angefordert werden. Und das Skript kann dann natürlich darauf verzichten, irgendeine Ausgabe zu machen.
In der html ausgabe sieht man nur einen kleinen punkt 1 pixel gross.
Und das stört nicht? Wäre ein transparenter Pixel nicht besser?
Außerdem wird dein Skript nur aufgerufen, wenn der Browser Bilder lädt, und diese außerdem nicht schon aus dem Cache holt, sondern tatsächlich beim Server nachfragt.
eben das ist ja das problem,das möchte ich so nicht,desshalb meine frage,ist es vielleicht möglich wenn das script gar nichts (cgi ohne print ausgabe) an den browser sendet?
Nichts senden ist nur eines: Nicht schön. Sollte man nicht tun. Weil "nichts" ja durchaus mißverstanden werden kann. Opera beispielsweise wartet bei solchen Dingen Ewigkeiten auf das Fertigladen der Seite. Kann man als Bug brandmarken - ist aber nunmal so. Wenn nichts kommt, obwohl was kommen sollte, ist das blöd.
- Sven Rautenberg
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
Hallo,
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>";
danke,das werde ich ausprobieren .
<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>
nö javascript möchte ich nicht einbinden.
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.
es ist kein counter(aber ähnlich),sondern ein script nur für mich sozusagen die einlog daten meiner
mitglieder im memberbereich.Es löscht die user bei (multiuser login) missbrauch.
Das script misst den counter status vom client/remonte-user,falls der counter den status 6 erreicht hat
in einem tag wird der username aus der htpasswd entfernt.
Gruss vom Alain
Halihallo Alain
print 'Content-Type: image/gif';
print 'Content-Type: image/gif'."\015\012";
nö javascript möchte ich nicht einbinden.
Du weisst aber, dass der Fallback <noscript>-Container ausgeführt
wird, falls JS nicht aktiviert ist? - Es funktioniert also für
(fast) jedermann. Ach ja, appropos fast: Was machst du, wenn einer
mit Lynx einlogt? - Dieser Browser lädt keine Bilder und schon ist
die ganze Einlog-Geschichte für die Katz.
es ist kein counter(aber ähnlich),sondern ein script nur für mich sozusagen die einlog daten meiner
mitglieder im memberbereich.Es löscht die user bei (multiuser login) missbrauch.
Das script misst den counter status vom client/remonte-user,falls der counter den status 6 erreicht hat
in einem tag wird der username aus der htpasswd entfernt.
Oha, da ist das 1x1 Bild-CGI-Script eine wirklich denkbar dumme Lösung. Nicht jeder Client lädt Bilder! - Man findet also dutzend Möglichkeiten deinen Memberbereich einzusehen, ohne "gesehen zu werden".
Verfolge den Vorschlag von Sven bzgl. SSI, dann hast du wenigstens
einigermassen die Sicherheit, denn: SSI wird immer geparsed, egal
mit welchem Client die Seite geöffnet wird. Das Caching-Problem ist
auch inexistent. Am Besten halte ich es jedoch, wenn die Memberseite
dynamisch über ein "richtiges" CGI-Script generiert wird und du dort
die ganze Logik implementierst.
Viele Grüsse
Philipp
Hallo,
Du weisst aber, dass der Fallback <noscript>-Container ausgeführt
wird, falls JS nicht aktiviert ist? - Es funktioniert also für
(fast) jedermann. Ach ja, appropos fast: Was machst du, wenn einer
mit Lynx einlogt? - Dieser Browser lädt keine Bilder und schon ist
die ganze Einlog-Geschichte für die Katz.
na dann ist auch der member bereich bzw. sein lynx client für die katz,weil sich der benutzer ja eigentlich
für die bilder interessiert oder die videoclips etc. und dazu benötigt er eben einen
client der bilder anzeigt.
dynamisch über ein "richtiges" CGI-Script generiert wird und du dort
die ganze Logik implementierst.
na gut,das hatte ich einmal so gemacht,aber der neue server unterstützt nicht,dass ich ein cgi
im geschützten bereich setzten kann nur im cgi-bin verzeichniss.
Gruss vom Alain
Moin!
na gut,das hatte ich einmal so gemacht,aber der neue server unterstützt nicht,dass ich ein cgi
im geschützten bereich setzten kann nur im cgi-bin verzeichniss.
Oh, mit anderen Worten: Jedermann kann deine Webseiten administrieren, wenn er nur die richtige URL kennt?
Schöne Sache! :)
- Sven Rautenberg