Alain: cgi mit <img src... in html einbinden

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

--
..."Zwei Dinge sind unendlich, das Universum und die menschliche Dummheit, aber bei dem Universum bin ich mir noch nicht ganz sicher." (Albert Einstein)
  1. 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

    --
    Die SelfHTML-Developer sagen Dankeschön für aktuell 20885,68 Euro Spendengelder!
    1. 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

      --
      ..."Zwei Dinge sind unendlich, das Universum und die menschliche Dummheit, aber bei dem Universum bin ich mir noch nicht ganz sicher." (Albert Einstein)
      1. 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

        --
        Die SelfHTML-Developer sagen Dankeschön für aktuell 20885,68 Euro Spendengelder!
  2. 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

    1. 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

      --
      ..."Zwei Dinge sind unendlich, das Universum und die menschliche Dummheit, aber bei dem Universum bin ich mir noch nicht ganz sicher." (Albert Einstein)
      1. 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

        1. 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

          --
          ..."Zwei Dinge sind unendlich, das Universum und die menschliche Dummheit, aber bei dem Universum bin ich mir noch nicht ganz sicher." (Albert Einstein)
          1. 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

            --
            Die SelfHTML-Developer sagen Dankeschön für aktuell 20885,68 Euro Spendengelder!