ich sehe die alte Version und die neue Version der Seite gemischt. Anscheinend hat ein paar upgedatete Sachen nicht nachgeladen und deshalb klappt es nicht.
header('Cache-Control: must-revalidate, pre-check=0, no-store, no-cache, max-age=0, post-check=0');
oben auf jeder Seite hat auch nicht geholfen.
Das kann nicht helfen. Wenn der Browser der Meinung ist, die alten Sachen, die er im Cache hat, wären noch gültig, macht er sich in der Regel nicht die Mühe, diese nochmals anzufragen und kann dementsprechend auch nicht mitbekommen, dass er die neue Version nicht zwischenspeichern soll (zumal es sinnlos ist, die neuen gar nicht zwischenzuspeichern – die funktionieren schließlich, es geht um die alten Versionen).
Beachte darüber hinaus, dass so eine Angabe nur für das jeweilige Objekt gilt. Schickst du sie zum Beispiel mit dem HTML-Code, gilt sie auch nur für diesen, _nicht_ für vom HTML-Code referenzierte Bilder oder Javascript-Dateien, die haben ihre eigenen Attribute.
Nimm' die Zeile wieder raus, es verschlimmbessert die gesamte Anwendung nur, weil du jetzt alle zwingst, immer wieder neu zu laden, obwohl es offenbar beim überwiegenden Teil problemlos funktionierte.
Kann ich das irgendwie mit anderen header-Informationen beeinflussen?
Nein, nachträglich nicht, siehe oben. Du kannst es im Voraus beeinflussen, indem du ein sinnvolles Verfallsdatum ausgibst. Sinnvoll! "Sofort" ist in den seltensten Fällen sinnvoll, sondern nur gedankenlos. TinyMCE beispielsweise änderst du wohl kaum jede Sekunde, sondern nur alle paar Wochen. Ein Verfallsdatum von einem Tag wäre hier mehr als angemessen, eher noch länger.
Es sei aber angemerkt, dass das Browser-Standardverhalten vorsieht, bei _jedem_ Zugriff auf ein Objekt dieses beim Server anzufragen, auch, wenn das Objekt bereits im Browser-Cache liegt (in dem Fall wird nur ein Abgleich durchgeführt, keine Datenübermittlung)! Genau deshalb wird es bei dir und so ziemlich allen anderen auch einwandfrei funktionieren.
Nun gibt es in Browsern die Möglichkeit, das Caching-Verhalten manuell zu ändern. Deshalb solltest du den Kunden bitten, seine Browser-Einstellungen diesbezüglich zu überprüfen (IE-Menü Extras -> Internetoptionen -> Seite Allgemein -> Temporäre Dateien -> Einstellungen). Die Option "Automatisch auf aktuelle Versionen prüfen" müsste IMHO richtig sein, "bei jedem Start" wäre auch noch ok, "niemals" ist aber definitiv falsch, "immer" überaus unklug.
Weiterhin solltest du prüfen, welche Kopfdaten dein Server sendet. Mit LiveHTTPHeaders, Firebug (beide Firefox) oder Dragonfly (Opera) kannst du den HTTP-Verkehr mitschneiden.
Für Bilder die per AJAX geändert werden können verwende ich schon Dateinamen im Format bild.jpg?.time()
Das halte ich für eine Holzhammermethode, das Caching bzw. die Methoden zu Kontrolle desselben sind eigentlich im Grunde ausgereift.
Ein kurzes Verfallsdatum mittels Expires sollte vollkommen ausreichen. Falls es sich um statische Dateien handelt und du einen aktuellen Apache verwendest, befasse dich mit mod_expires.