Mothe: Browser-Cache, mal wieder? ...

hallo,

habe hier wieder einmal ein "kleines" problem :(

folgendes szenario:
ein besucher hat die möglichkeit, 3 bilder upzuloaden, das folgend aufgebaut ist
UserID _ BildNr.(jpg/gif/png)
also z.b.:
1_1.jpg
1_2.jpg
1_3.gif

2_1.jpg
2_2.gif
usw. ...

wenn der user ein bild, das er bereits hochgeladen hat, löscht, dann ändern sich
die dateinamen auch, also z.b. der besucher löscht 1_2.jpg, dann wird aus 1_3.gif automatisch 1_2.jpg
soweit kein problem, nur ein problem tritt auf, wenn sich die dateiendung nicht ändert,
dann wird auf der nächsten seite (wo die bilder wieder angezeigt werden) noch die daten
aus (vermutlich) dem browser cache geladen, also zeigt er nicht das "neue" 2te bild an,
sondern das, was der user eigentlich gelöscht hat... :(

habe es schon mit:
<%
Response.Buffer = True
Response.Expires = 0
Response.ExpiresAbsolute = CDate("31.01.1982")
Response.AddHeader "Pragma","no-cache"
Response.AddHeader "cache-control", "no-store"
%>

probiert, leider erfolglos :(

und auch mit einer Sleep-Komponente (dachte zuerst das das windows etwas länger braucht,
um die neuen Dateien richtig "anzeigen zu können) hat es nicht funktioniert...

woran liegt das? bzw., wie kann man dieses problem am besten umgehen?

gruß,
Mothe

  1. Hallo!

    habe es schon mit:
    <%
    Response.Buffer = True
    Response.Expires = 0
    Response.ExpiresAbsolute = CDate("31.01.1982")
    Response.AddHeader "Pragma","no-cache"
    Response.AddHeader "cache-control", "no-store"
    %>

    Probiers mal mit:
    header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");    // Datum aus Vergangenheit
    header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");     // immer ge&auml;ndert
    header("Cache-Control: no-store, no-cache, must-revalidate");  // HTTP/1.1
    header("Cache-Control: post-check=0, pre-check=0", false);
    header("Pragma: no-cache");                          // HTTP/1.0

    Beste Grüße
    Viennamade

    1. Hallo!

      habe es schon mit:
      <%
      Response.Buffer = True
      Response.Expires = 0
      Response.ExpiresAbsolute = CDate("31.01.1982")
      Response.AddHeader "Pragma","no-cache"
      Response.AddHeader "cache-control", "no-store"
      %>

      Probiers mal mit:
      header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");    // Datum aus Vergangenheit
      header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");     // immer ge&auml;ndert
      header("Cache-Control: no-store, no-cache, must-revalidate");  // HTTP/1.1
      header("Cache-Control: post-check=0, pre-check=0", false);
      header("Pragma: no-cache");                          // HTTP/1.0

      Beste Grüße
      Viennamade

      hi, hat es leider auch nicht gebracht, sofern ich das richtig in asp übersetzt habe *g*:

      <%
      Response.Buffer = True
      Response.Expires = 0
      Response.ExpiresAbsolute = CDate("31.01.1982")
      Response.AddHeader "Pragma","no-cache"
      Response.AddHeader "cache-control", "no-store"
      Response.AddHeader "cache-control", "no-cache"
      Response.AddHeader "cache-control", "must-reviladate"
      Response.AddHeader "cache-control", "post-check=0"
      Response.AddHeader "cache-control", "pre-check=0"
      %>

      nach einer aktualisierung funktioniert es komischerweise, nur ist irgendwie umständlich, wenn der user immer zuerst F5 drücken muß, um die aktuellen bilder zu sehen... :-/
      aber sofern keine andere möglichkeit besteht, werde ich wohl oder übel auf diese methode zurückgreifen müßen,
      außer ich mach den reload auch irgendwie scriptpasierend

      aber vielen dank für die antwort,...

      gruß,
      Mothe

  2. Moin!

    habe es schon mit:
    <%
    Response.Buffer = True
    Response.Expires = 0
    Response.ExpiresAbsolute = CDate("31.01.1982")
    Response.AddHeader "Pragma","no-cache"
    Response.AddHeader "cache-control", "no-store"
    %>

    probiert, leider erfolglos :(

    Es nutzt dir nichts, wenn du die HTML-Seite als nicht-cachebar auslieferst - die BILDER müssen als nicht-cachebar oder unter einer neuen URL ausgeliefert werden.

    Das bedeutet: Entweder kannst du den Server standardmäßig sio konfigurieren, dass er Bilder ebenfalls mit diesen Expires-Headern ausliefert, oder du schreibst ein ASP-Skript, welches die Bilder inkl. Expires-Headern durchschleust.

    Die Alternative mit der URL wäre, dass du jeder BildURL noch einen sich ständig ändernden Parameter dranhängst. Dann muß der Browser auch jedesmal beim Server anfragen.

    Methode 1 ist die saubere, Methode 2 dürfte wahrscheinlich die einfachere sein.
     - Sven Rautenberg

    1. Moin!

      habe es schon mit:
      <%
      Response.Buffer = True
      Response.Expires = 0
      Response.ExpiresAbsolute = CDate("31.01.1982")
      Response.AddHeader "Pragma","no-cache"
      Response.AddHeader "cache-control", "no-store"
      %>

      probiert, leider erfolglos :(

      Die Alternative mit der URL wäre, dass du jeder BildURL noch einen sich ständig ändernden Parameter dranhängst. Dann muß der Browser auch jedesmal beim Server anfragen.

      Methode 1 ist die saubere, Methode 2 dürfte wahrscheinlich die einfachere sein.

      • Sven Rautenberg

      vielen dank für die antwort :)
      wie in meinem 1. beitrag schon erwähnt, habe ich das auch schon versucht, zuerst leider erfolglos... bis ich darauf gekommen bin, das ich das "Randomize" vergessen habe, war einfach nur ein dummer flüchtigkeitsfehler :(
      am server selbst kann ich leider nicht allzuviel konfigurieren, ist im prinzib nicht meiner :)
      aber so funktioniert es auch wunderbar (und da es größtenteils nur kleine bilder sein, und auch maximal 3 stück, ist die performance auch noch sehr gut)

      gruß,
      Mothe