Treziman: JS - Code verstecken?

Hallo Gemeinde der internationalen Computermanipulation,

ein paar Tage lang habe ich mich jetzt mal mit javascript und Sicherheit, bzw. Kopierschutz des JS, beschäftigt. Den Quelltext zu verbergen ist zwar erlaubt, halte ich aber auch für unsinnig. Berechtigt ist aber wohl das Interesse, seinen mühsam erstellten JS-Code schützen zu wollen. Auf "stackoverflow" habe ich auch etwas gefunden, was zu funktionieren scheint, habe aber auch selbst mal experimentiert. Heraus kam folgendes, wozu ich, als unstudierter Otto-Normal-Manipulierer, gern die Meinung der Insider-Profis (Gunnar, Rolf B, Martin, ...?) lesen würde.

Codes sind auf das Wesentliche beschränkt.

index.php:

<?php

session_start();

$_SESSION["erlaubnis"]=1;

...

echo"<div id='inhalt'></div>"; 

...

echo"<script src='dummy.js'></script>";

?>

dummy.js:

$(function(){

$("#inhalt").load("inhalt.php");

});

inhalt.php:

<?php

session_start();

if(isset($_SESSION["erlaubnis"])){

unset($_SESSION["erlaubnis"]);

...
code
...

echo"<script src='inhalt.js'></script>";
// (in inhalt.js ist der zu verbergende JS-Code enthalten)

}

?>

inhalt.js: (komplett zu verbergen; als Dateinamen sollte man einen schwer zu erratenden wählen)

$(function(){

...
code
...

$("#inhalt script").attr("src","was auch immer fürn Name");
// (Adresse der JS-Datei verschleiern)

});

Das scheint zu funktionieren. Im Quelltext erscheint zwar die dummy.js und kann auch angeklickt werden. Und man sieht, was darin steht (siehe oben). Kommt nun jemand auf die Idee, die inhalt.php direkt über die Adresszeile aufrufen zu wollen, wird dies durch die $_SESSION["erlaubnis"] verhindert. Im Inspektor (Webentwicklerwerkzeuge) erscheint der Pseudoname "was auch immer fürn Name". Nach einem Aktualisieren der Seite, z.B. mit "F5", wird erstmal wieder die $_SESSION["erlaubnis"] gesetzt, um das Laden der inhalt.php zu ermöglichen. Hat man javascript im Browser deaktiviert, läuft die Seite garnicht. Ich weiss nicht, habe ich etwas übersehen? Wie gesagt, es scheint zu funktionieren.

LG Treziman

--
Ich wurde als deprecated gekennzeichnet und werde alsbald nicht mehr unterstützt...
  1. @@Treziman

    Ich hab dein Posting mal lesbar gemacht: den Code als solchen formatiert (Codeblöcke mit

    ```php
    
    ```
    

    (bzw. js; ~~~ statt ``` geht auch); Inlinecode mit ` … `{:.language-php}.

    Das nächste Mal machst du das bitte selbst. Dafür gibt’s den </>-Button über dem Eingabefeld.

    Hat man javascript im Browser deaktiviert, läuft die Seite garnicht. Ich weiss nicht, habe ich etwas übersehen? Wie gesagt, es scheint zu funktionieren.

    „Läuft die Seite garnicht“ ist das Gegenteil von „scheint zu funktionieren“.

    Außerdem kann jeder JavaScript-Quelltext, der im Browser läuft, auch im Entwicklertool angezeigt werden. Dein Vorhaben ist zum Scheitern verurteilt.

    🖖 Живіть довго і процвітайте

    --
    „Im Vergleich mit Elon Musk bei Twitter ist ein Elefant im Porzellanladen eine Ballerina.“
    — @Grantscheam auf Twitter
  2. Moin Treziman,

    sowohl im Netzwerk-Tab der Webentwickler-Tools als auch in den Sourcen ist dein JavaScript-Code zu finden – und zwar exakt der, der auch beim jeweiligen Nutzer gerade ausgeführt wird. „Verstecken“ funktioniert nur partiell durch

    • Verschleiern
    • Web Assembly

    Viele Grüße
    Robert

    1. Hallo Robert und Gunnar,

      @Gunnar Danke fürs Lesbarmachen. Ich poste hier zu selten...

      Stimmt, ihr (Robert) habt Recht. Im Entwicklertool unter Netzwerkanalyse (Mozilla) erscheint die JS-Datei und nach Doppelklick der Code. Mist!

      Meine Idee war, künftige Projekte praktisch nur mit javascript zu realisieren. Da ist es wohl besser auf PHP zu setzen und javascript nur bedingt einzubauen, so als Hilfe. Das wäre eh sinnvoller, da man wohl einzelne DIV-Container mit Bildern nicht explizit aktualisieren kann, um aktuelle Bildupdates auch anzeigen zu können. Naja, gut, wieder was gelernt.

      Das Beispiel unter: Beispiel stackoverflow klappt dann wohl auch nicht 100%ig.

      @Gunnar

      Ich habe den Link mittels dem Symbol oben eingebaut. War das richtig?☺️

      Danke euch nochmal!

      Treziman

      --
      Ich wurde als deprecated gekennzeichnet und werde alsbald nicht mehr unterstützt...
      1. Moin Treziman,

        Stimmt, ihr (Robert) habt Recht. Im Entwicklertool unter Netzwerkanalyse (Mozilla) erscheint die JS-Datei und nach Doppelklick der Code. Mist!

        Und genau das steht auch in den (höher gewerteten) Antworten auf die von dir gefundene Stackoverflow-Frage.

        Meine Idee war, künftige Projekte praktisch nur mit javascript zu realisieren.

        Damit sie nur auf dem Client läuft?

        Da ist es wohl besser auf PHP zu setzen und javascript nur bedingt einzubauen, so als Hilfe.

        Das kommt darauf an, was genau du vorhast.

        Das wäre eh sinnvoller, da man wohl einzelne DIV-Container mit Bildern nicht explizit aktualisieren kann, um aktuelle Bildupdates auch anzeigen zu können.

        Deine „DIV-Container“ heißen jetzt figure oder picture und die kannst du auch mit JavaScript manipulieren.

        Das Beispiel unter: Beispiel stackoverflow klappt dann wohl auch nicht 100%ig.

        Wie gesagt, das steht dort auch ausführlich geschrieben.

        Viele Grüße
        Robert

  3. Hallo Treziman,

    wie Gunnar und Robert schrieben - wenn Du Code geheim halten willst, dann schick ihn nicht zum Browser.

    Clientseitig kannst Du Dinge nur verschleiern oder verstecken, was aber jemanden, der sich auskennt, in keinster Weise stoppt.

    Web Assembly macht es schwerer, aber ich gehe davon aus, dass es dafür auch Decompiler gibt, die lesbaren Code daraus machen.

    Früher hat man mal Java Applets, ActiveX Komponenten oder Flash genommen, um den Zugang zum Code zu erschweren. Wirklich helfen tut das nicht. Was Du rausschickst zum Browser, musst Du als „frei zugänglich“ ansehen.

    Wenn Du Code als geheim behandeln willst, muss er auf deinem Server laufen. In PHP, in JavaScript, wenn Du einen node.js Server hast, ein Kater (Tomcat) hilft Dir mit Java, und ASP.NET bringst Du unter Windows mit IIS oder unter Linux mit Kestrel und einem Apache oder nginx Reverse Proxy zum laufen. ASP.NET Core bietet Dir mit Blazor auch eine Möglichkeit, C# Code als Web Assembly auszuliefern. Ich habe das aber selbst noch nicht gemacht.

    Rolf

    --
    sumpsi - posui - obstruxi
    1. Danke euch allen nochmal.

      Meine Idee war, künftige Projekte praktisch nur mit javascript zu realisieren.

      Damit sie nur auf dem Client läuft

      Nein, PHP kommt natürlich auch ins Spiel (AJAX).

      @Rolf B

      Über Codieren und Decodieren, bzw. Compilen habe ich schon gelesen. Das ist mir aber den Aufwand nicht Wert wenns nicht 100% sicher ist. Ist auch nur eine Erschwernis.

      Ich kam auf das Ganze durch einen Kumpel, der vor ein paar Jahren mal eine Webseite haben wollte. Im Hintergrund sollte dauernd eine Animation laufen, während im Vordergrund gearbeitet werden kann. Dies fiel mir wieder ein und da hab ich mal ein bisschen rumexperimentiert. Das läuft auch alles ohne Aktualisierung der Seite, zumindest solange, bis man Bilder anschauen soll, die ggf. vorher geändert wurden. Lade ich nämlich ein PHP-Script in den inhalt-DIV, werden die Bilder aus dem Browsercache geholt, weil sie gemäss damals dem Tip von Rolf

      PHP
      echo"<img src='imageloader.php?id=sowieso' />";
      

      adressiert werden. Mit direkter Adressierung via JS

      ...
      $("#bild1").attr("src","bildpfad");
      ...
      

      klappts, aber dann sieht man den kompletten Pfad.

      Das Bild selbst sieht man sowieso und es kann auch gespeichert werden.

      Die Sache mit der Animation war auch so ein Fall. Animationen sind mir zwar nicht absolut neu, wohl aber die Art und Weise. Ich habs aber alleine hinbekommen - durch probieren, weil ich mit folgender Anweisung nicht viel anfangen kann:

      CSS
      offset-path: path("M-300,550 A10,5 0 1,1 1300,550");
      

      M-300,550 und 1300,550 bestimmen Anfang und Ende. Soviel weiss ich. Aber was A10,5 0 1,1 bedeuten, weiss ich nicht. Ich hab auch im Net nichts gefunden, wo man das klar nachlesen kann. Kennt vielleicht von euch jemand eine Seite mit guter Erklärung?

      Ich muss jetzt erstmal dringend auf die Couch...😇

      Gruss Treziman

      --
      Ich wurde als deprecated gekennzeichnet und werde alsbald nicht mehr unterstützt...
      1. Hallo Treziman,

        werden die Bilder aus dem Browsercache geholt, weil sie gemäss damals dem Tip von Rolf

        echo"<img src='imageloader.php?id=sowieso' />";
        

        adressiert werden.

        Ich weiß nicht mehr, was wir damals diskutiert haben - aber ob eine per PHP geholte Ressource im Browsercache landet oder nicht, hängt am HTTP Verb (POST/GET - bei img src natürlich GET) und daran, welche Response Header (Cache-Control, Expires) Du im imageloader.php setzt.

        Rolf

        --
        sumpsi - posui - obstruxi
      2. Servus!

        Die Sache mit der Animation war auch so ein Fall. Animationen sind mir zwar nicht absolut neu, wohl aber die Art und Weise. Ich habs aber alleine hinbekommen - durch probieren, weil ich mit folgender Anweisung nicht viel anfangen kann:

        CSS
        offset-path: path("M-300,550 A10,5 0 1,1 1300,550");
        

        https://wiki.selfhtml.org/wiki/SVG/Tutorials/Pfade#elliptische_B.C3.B6gen

        M-300,550 und 1300,550 bestimmen Anfang und Ende. Soviel weiss ich. Aber was A10,5 0 1,1 bedeuten, weiss ich nicht. Ich hab auch im Net nichts gefunden, wo man das klar nachlesen kann. Kennt vielleicht von euch jemand eine Seite mit guter Erklärung?

        Ich muss jetzt erstmal dringend auf die Couch...😇

        Gruss Treziman

        Herzliche Grüße

        Matthias Scharwies

        --
        Ich habe heute rausgefunden, dass in das Pizzafach meines Rucksacks auch ein Laptop passt!
        1. @Matthias

          Danke, damit kann ich was anfangen!

          @Rolf

          Es ging damals darum, dass Suchmaschinen Bilder nicht finden sollen. Und da sie Links folgen, hast Du mir den Tip mit dieser Adressierung gegeben. Bis dahin wusste ich nicht, dass das überhaupt so geht.

          Ich habe vor dieser Antwort mal ein bisschen probiert. Klappt aber nicht. Die Bilder werden nicht aktualisiert. Hier mal der ganze Vorgang (Namen sind anders als im Versuchsprojekt):

          User kommt auf Startseite "index.php". Ein einmaliger Vorgang, index.php wird danach nicht mehr aufgerufen, bzw. aktualisiert. Hier DIV-Container mit ID "inhalt", worin sich alles per javascript abspielt. Über Menü aufrufbar: "Bildtausch" und "Bilder ansehen". Bilder tauschen funktioniert. Neue Positionen werden per AJAX in DB gespeichert.

          In Bilder ansehen u.a.:

          <img id='bild1' src='' alt='Bild 1'/>
          <img id='bild2' src='' alt='Bild 2'/>
          <img id='bild3' src='' alt='Bild 3'/>
          ...
          <img id='bild9' src='' alt='Bild 9'/>
          

          javascript u.a.:

          $("#bild1").attr("src","pfad/imageloader.php?bid=1");
          

          imageloader.php u.a.:

          if (file_exists($file)) {
          header('Content-Description: File Transfer');
            //header('Content-Type: application/octet-stream');
          header('Content-type: image/png');  
          header('Content-Disposition: attachment; filename="'.basename($file).'"');
            //header('Expires: 0');
          header('Expires: Sat, 26 Jul 1997 05:00:00 GMT');  
          header('Cache-Control: no-cache, must-revalidate');
            //header('Pragma: public');
          header('Pragma: no-cache');
            header('Content-Length: ' . filesize($file));
            readfile($file);
            exit;
          }
          

          Schaut man sich zuerst die Bilder an, werden sie korrekt angezeigt. Dann tauscht man 2, wechselt wieder über Menü zum Ansehen und da sind die Bilder noch in der alten Reihenfolge, obwohl Inhalt neu geladen. Also kommen sie aus dem Cache.

          Ich wüsste an dieser Stelle nicht mehr weiter, ausser die Seite zu aktualisieren.

          LG Treziman

          --
          Ich wurde als deprecated gekennzeichnet und werde alsbald nicht mehr unterstützt...
          1. Moin Treziman,

            Es ging damals darum, dass Suchmaschinen Bilder nicht finden sollen. Und da sie Links folgen, hast Du mir den Tip mit dieser Adressierung gegeben. Bis dahin wusste ich nicht, dass das überhaupt so geht.

            Suchmaschinen halten sich normalerweise an die robots.txt. Alles andere ist nur Obfuscation, weil du im Endeffekt kaum zwischen einem menschlichen Nutzer und einem Robot unterscheiden kannst.

            Viele Grüße
            Robert

            1. Hallo Robert,

              Suchmaschinen halten sich normalerweise an die robots.txt.

              tja, sollten sie. Eine Garantie gibts dafür aber nicht.

              LG Treziman

              --
              Ich wurde als deprecated gekennzeichnet und werde alsbald nicht mehr unterstützt... Das W3C-Konsortium sieht für mich den Ruhestand vor...
              1. @@Treziman

                Suchmaschinen halten sich normalerweise an die robots.txt.

                tja, sollten sie. Eine Garantie gibts dafür aber nicht.

                Es gibt eine Garantie, dass Suchmaschinen deine Bilder nicht finden: stell sie nicht ins Netz.

                🖖 Живіть довго і процвітайте

                --
                „Ukončete, prosím, výstup a nástup, dveře se zavírají.“
                1. @Gunnar

                  Es gibt eine Garantie, dass Suchmaschinen deine Bilder nicht finden: stell sie nicht ins Netz.

                  Ja danke, Gunnar! Und wenn sie in meinem Wohnzimmer herumcrawlen? Der Link dazu steht unten am Klingelknopf... 🤪😀

                  Aber kann mal bitte jemand den folgenden Code in der imageloader.php checken?

                  if (file_exists($file)) {
                    header('Content-Description: File Transfer');
                    // header('Content-Type: application/octet-stream');
                    header('Content-type: image/png');  
                    header('Content-Disposition: attachment; filename="'.basename($file).'"');
                    // header('Expires: 0');
                    header('Expires: Sat, 26 Jul 1997 05:00:00 GMT');  
                    header('Cache-Control: no-cache, must-revalidate');
                    // header('Pragma: public');
                    header('Pragma: no-cache');
                    header('Content-Length: ' . filesize($file));
                    readfile($file);
                    exit;
                  }
                  

                  Rolf B meinte dazu:

                  aber ob eine per PHP geholte Ressource im Browsercache landet oder nicht, hängt am HTTP Verb (POST/GET - bei img src natürlich GET) und daran, welche Response Header (Cache-Control, Expires) Du im imageloader.php setzt.

                  Danke.

                  P.S. Hab gerade etwas entdeckt bezüglich Suchmaschinen und Link: Folgen Crawler JEDEM Link? Also auch z.B. einem, der in einer ausgelagerten CSS auf ein background-image verweist?

                  PPS by Rolf B: Code als PHP markiert (mit ~~~php davor) und ein paar Einrückungen ergänzt

                  LG Treziman

                  --
                  Ich wurde als deprecated gekennzeichnet und werde alsbald nicht mehr unterstützt... Das W3C-Konsortium sieht für mich den Ruhestand vor...
                  1. Hallo Treziman,

                    • HTTP Header sind eigentlich nicht case-sensitive, es ist aber trotzdem Brauch, den ersten Buchstaben von jedem Wort groß zu schreiben: Content-Type und nicht Content-type.
                    • Pragma: no-cache ist missbilligt und kann weg, es ist offiziell durch Cache-Control: no-cache ersetzt
                    • Cache-Control: no-cache bedeutet nicht, dass die Ressource nicht in einem Cache gespeichert werden darf. Sondern, dass sie einer Wiederverwendung beim Server angefragt werden soll, ob sie noch aktuell ist. Wenn Du die Ressource gar nicht im Cache haben willst, lautet die Cache-Control Direktive no-store.

                    Ich bin kein Cache-Experte. Aber vielleicht nützt Dir das hier.

                    Rolf

                    --
                    sumpsi - posui - obstruxi
                    1. Okay, vielen Dank Rolf!

                      Den Link werd ich mal in Ruhe durchsehen, ist ja alles auf englisch. Dann baue ich die Datei mal um. Mal sehen, obs dann klappt.

                      --
                      Ich wurde als deprecated gekennzeichnet und werde alsbald nicht mehr unterstützt... Das W3C-Konsortium sieht für mich den Ruhestand vor...
                      1. Kurz zur Info:

                        Es klappt in Edge und Chrome, aber - wiedermal - nicht in Mozilla.😡

                        --
                        Ich wurde als deprecated gekennzeichnet und werde alsbald nicht mehr unterstützt... Das W3C-Konsortium sieht für mich den Ruhestand vor...
                        1. Moin Treziman,

                          Es klappt in Edge und Chrome, aber - wiedermal - nicht in Mozilla.😡

                          was ist „es“ und wie äußert „es“ sich?

                          Viele Grüße
                          Robert

                          1. Moin Treziman,

                            Es klappt in Edge und Chrome, aber - wiedermal - nicht in Mozilla.😡

                            was ist „es“ und wie äußert „es“ sich?

                            Viele Grüße
                            Robert

                            Hallo Robert,

                            "es" bedeutet, dass die getauschten Bilder in Chrome und Edge ohne aktualisieren der gesamten Seite sofort korrekt angezeigt werden, während man bei Mozilla extra "F5" drücken muss (oder Strg+R oder auf "Aktuelle Seite neu laden" klicken). Über Mozilla hab ich mich schonmal in einem anderen Thread ausgelassen...

                            LG Treziman

                            Ich wurde als deprecated gekennzeichnet und werde alsbald nicht mehr unterstützt... Das W3C-Konsortium sieht für mich den Ruhestand vor...

                            1. Moin Treziman,

                              "es" bedeutet, dass die getauschten Bilder in Chrome und Edge ohne aktualisieren der gesamten Seite sofort korrekt angezeigt werden, während man bei Mozilla extra "F5" drücken muss (oder Strg+R oder auf "Aktuelle Seite neu laden" klicken).

                              Ohne den tatsächlichen Code zu sehen kann ich dazu nichts sagen.

                              Über Mozilla hab ich mich schonmal in einem anderen Thread ausgelassen...

                              Mag sein. Wenn es hier von Relevanz wäre, gäbe es wohl eine Link. Im Übrigen ist Mozilla eine Organisation.

                              Viele Grüße
                              Robert

                              1. Hallo Robert,

                                es ist eine einfache Sache: In der index.php gibt es einen DIV-Container mit der ID "inhalt"

                                HTML
                                
                                <div id="inhalt"></div>
                                

                                Mittels Jquery wird über ein Menü der Inhalt geladen. Zwei Menüpunkte sind da wichtig: 1. Bilder tauschen (Reihenfolge ändern) und 2. Bilder ansehen. Hat man Bilder getauscht und klickt auf "Bilder ansehen", wird die neue Reihenfolge in Edge und Chrome sofort angezeigt, während man in Firefox (von der Organisation Mozilla...) erst die Seite aktualisieren muss.

                                JQUERY
                                
                                $("#inhalt").load("bilderansehen.php");
                                
                                PHP (bilderansehen.php)
                                ...
                                echo "<img src='imageloader.php?bildid=1' />";
                                ...
                                

                                In der imageloader.php: siehe dazu 01.04.2023 04:54

                                Inzwischen funktioniert es aber auch unter Firefox. Allerdings darf es da kein DIV-Container sein sondern ein iframe. Warum und weswegen... ich habe nicht die geringste Ahnung.

                                HTML
                                
                                <iframe name="inhalt" id="inhalt" src=""></iframe>
                                
                                Dazu JQUERY
                                
                                $("#inhalt").attr("src","bilderansehen.php");
                                

                                Einstein meinte einmal dazu: "Es gibt Menschen, die machen sich Gedanken über das Verhalten von Browsern. Andere beschäftigen sich mit weniger komplizierten Dingen, zum Beispiel mit der Relativitätstheorie..."

                                LG Treziman

                                --
                                Ich wurde als deprecated gekennzeichnet und werde alsbald nicht mehr unterstützt... Das W3C-Konsortium sieht für mich den Ruhestand vor...
                                1. @@Treziman

                                  Einstein meinte einmal dazu: "Es gibt Menschen, die machen sich Gedanken über das Verhalten von Browsern. Andere beschäftigen sich mit weniger komplizierten Dingen, zum Beispiel mit der Relativitätstheorie..."

                                  Ich habe da eine andere Theorie: Browser tun eigentlich ganz gut ihren Dienst – solange nicht jemand mit einer verrückten Idee daherkommt und von ihnen Dinge erwartet, für die sie nicht geschaffen sind.

                                  🖖 Живіть довго і процвітайте

                                  --
                                  „Ukončete, prosím, výstup a nástup, dveře se zavírají.“
                                2. Einstein meinte einmal dazu: "Es gibt Menschen, die machen sich Gedanken über das Verhalten von Browsern. Andere beschäftigen sich mit weniger komplizierten Dingen, zum Beispiel mit der Relativitätstheorie..."

                                  Wann bzw. welcher Einstein soll das gewesen sein?

                                  1. Einstein meinte einmal dazu: "Es gibt Menschen, die machen sich Gedanken über das Verhalten von Browsern. Andere beschäftigen sich mit weniger komplizierten Dingen, zum Beispiel mit der Relativitätstheorie..."

                                    Wann bzw. welcher Einstein soll das gewesen sein?

                                    Was? Das weißt Du nicht? Elon „E=M*C²“ Einstein.

                                    Energy = Milk * Coffee²

                                  2. @@???

                                    Einstein meinte einmal dazu: "Es gibt Menschen, die machen sich Gedanken über das Verhalten von Browsern. Andere beschäftigen sich mit weniger komplizierten Dingen, zum Beispiel mit der Relativitätstheorie..."

                                    Wann bzw. welcher Einstein soll das gewesen sein?

                                    Wohl derselbe Einstein, der zusammen mit seinen Nachbarn The Dark Side of the Moon hört.

                                    🖖 Живіть довго і процвітайте

                                    --
                                    „Ukončete, prosím, výstup a nástup, dveře se zavírají.“
                                    1. @@???

                                      Einstein meinte einmal dazu: "Es gibt Menschen, die machen sich Gedanken über das Verhalten von Browsern. Andere beschäftigen sich mit weniger komplizierten Dingen, zum Beispiel mit der Relativitätstheorie..."

                                      Wann bzw. welcher Einstein soll das gewesen sein?

                                      Wohl derselbe Einstein, der zusammen mit seinen Nachbarn The Dark Side of the Moon hört.

                                      Naja. Wenn man zu spät geboren ist und also nur Zugriff auf Geräte hat, deren Leistung in „Watt(PMPO)“ angegeben wird (und die man in den Geschirrschrank stellt, damit sie „unglaublich gut klingen“), kann man gute Musik eben nur dann halbwegs korrekt und also Genuss hören, wenn der Nachbar seine Anlage (deren Leistung noch in „Watt(sinus)“ angegeben wurde) freundlicherweise mal ein wenig aufdreht.

                                  3. Moin,

                                    Einstein meinte einmal dazu: "Es gibt Menschen, die machen sich Gedanken über das Verhalten von Browsern. Andere beschäftigen sich mit weniger komplizierten Dingen, zum Beispiel mit der Relativitätstheorie..."

                                    Wann bzw. welcher Einstein soll das gewesen sein?

                                    Dieser:

                                    Glaube nicht alles im Internet.
                                    — Albert Einstein

                                    Viele Grüße
                                    Robert

                                3. Moin Treziman,

                                  es ist eine einfache Sache: In der index.php gibt es einen DIV-Container mit der ID "inhalt"

                                  HTML
                                  
                                  <div id="inhalt"></div>
                                  

                                  Die Foren-Syntax ist auch eine einfache Sache: Code wird nicht so ausgezeichnet,

                                  ~~~
                                  HTML
                                  
                                  <div id="inhalt"></div>
                                  ~~~
                                  

                                  sondern so:

                                  ~~~html
                                  <div id="inhalt"></div>
                                  ~~~
                                  

                                  Das ergibt dann schön

                                  <div id="inhalt"></div>
                                  

                                  In der imageloader.php: siehe dazu 01.04.2023 04:54

                                  Falls du deinen Beitrag meinst, kannst du diesen hier verlinken.

                                  Hast du denn schon einmal in den Netzwerk-Tab der Browser-Entwicklertools geschaut, was da genau passiert, wenn jQuery (was hier eigentlich auch gar nicht nötig wäre, weil Javascript das von alleine kann) die Ressource neu lädt?

                                  Dazu JQUERY

                                  $("#inhalt").attr("src","bilderansehen.php");
                                  

                                  Was für HTTP-Header sendet eigentlich bilderansehen.php? Wird eventuell diese Ressource gecachet?

                                  Viele Grüße
                                  Robert

                  2. Moin Treziman,

                    Aber kann mal bitte jemand den folgenden Code in der imageloader.php checken?

                    if (file_exists($file)) {
                      header('Content-Description: File Transfer');
                      // header('Content-Type: application/octet-stream');
                      header('Content-type: image/png');  
                      header('Content-Disposition: attachment; filename="'.basename($file).'"');
                    

                    Das ↑ ist doch eine Bitte an den Browser die Ressource herunterzuladen.

                      // header('Expires: 0');
                      header('Expires: Sat, 26 Jul 1997 05:00:00 GMT');  
                      header('Cache-Control: no-cache, must-revalidate');
                      // header('Pragma: public');
                      header('Pragma: no-cache');
                      header('Content-Length: ' . filesize($file));
                      readfile($file);
                      exit;
                    }
                    

                    Was passiert eigentlich, wenn die Datei nicht existiert?

                    Viele Grüße
                    Robert

                    1. Hallo Robert,

                      Was passiert eigentlich, wenn die Datei nicht existiert?

                      Dann wird der Text unter (img) alt="..." angezeigt.

                      Hast du denn schon einmal in den Netzwerk-Tab der Browser-Entwicklertools geschaut, was da genau passiert, wenn jQuery (was hier eigentlich auch gar nicht nötig wäre, weil Javascript das von alleine kann) die Ressource neu lädt?

                      Das Skript wird jedesmal wieder abgearbeitet, Status 200. Bei fehlender Datei: Status 404.

                      Was für HTTP-Header sendet eigentlich bilderansehen.php? Wird eventuell diese Ressource gecachet?

                      Ich habe beim Rumprobieren in jeder Datei den Header mit "no-store" gesendet, abwechselnd und überall gleichzeitig. Im Head der index als

                      <meta http-equiv='Cache-Control' content='no-store' />
                      

                      Firefox zeigt immer die alte Reihenfolge an, bis die Seite neu geladen wird.

                      Mit iframe funktionierts in jedem Browser.

                      LG Treziman

                      --
                      Ich wurde als deprecated gekennzeichnet und werde alsbald nicht mehr unterstützt... Das W3C-Konsortium sieht für mich den Ruhestand vor...
                      1. Moin Treziman,

                        Hast du denn schon einmal in den Netzwerk-Tab der Browser-Entwicklertools geschaut, was da genau passiert, wenn jQuery (was hier eigentlich auch gar nicht nötig wäre, weil Javascript das von alleine kann) die Ressource neu lädt?

                        Das Skript wird jedesmal wieder abgearbeitet, Status 200. Bei fehlender Datei: Status 404.

                        Und was steht da genau für die verschiedenen Browser? Wird da doch etwas gecachet? Ist die Reihenfolge des Response in den verschiedenen Browsern gleich oder unterschiedlich?

                        Viele Grüße
                        Robert

                        1. Hallo Robert,

                          Und was steht da genau für die verschiedenen Browser? Wird da doch etwas gecachet? Ist die Reihenfolge des Response in den verschiedenen Browsern gleich oder unterschiedlich?

                          --

                          Die Reihenfolge der Skripte ist immer gleich, steht in beiden Browsern dasselbe.

                          Bei Firefox wird die bilderansehen.php einmal aufgerufen, die imageloader.php mit der Bild-ID "0" aber zweimal, wobei einmal (immer nach dem ersten Aufruf dieser Datei) ausgegraut und unter "Übertragen" steht "Aus Cache". Setze ich bei "Cache deaktivieren" ein Häkchen, wird die imageloader.php?bid=0 auch nur einmal aufgerufen (unter Firefox). Bei Chrome wird sie immer nur einmal aufgerufen.

                          Wird da etwas "überschrieben"? Ich habe aber keine Ahnung, was da wirklich abläuft.

                          Danke und Gruss

                          Treziman

                          Ich wurde als deprecated gekennzeichnet und werde alsbald nicht mehr unterstützt... Das W3C-Konsortium sieht für mich den Ruhestand vor...