Hallo zusammen,
ich bin jetzt seit eineinhalb Tagen erfolglos auf der Suche nach einer Lösung für mein Problem und schließlich auf diese Seite gestoßen. Danke erstmal an die Betreiber für diese Plattform, und vielleicht weiß ja auch jemand eine Lösung für mich.
Was ich will: in einem geschützten Mitgliederbereich sollen angemeldeten Benutzern Dokumente mit sensiblen Daten zur Verfügung gestellt werden. Diese Dokumente liegen in einem per .htaccess geschützten Verzeichnis und werden per PHP durchgereicht. Mein zugehöriges Skript (schickt die Datei per "Content-disposition: inline;" an den Client) funktioniert wunderbar mit allen Browsern, die ich unterstützen möchte.
Die Probleme traten nun auf, als ich per Session-Handling sicherstellen wollte, dass der zugreifende Benutzer auch wirklich korrekt angemeldet ist. Das Starten der Session per
führte dazu, dass der Internet Explorer (6.0.2900.2180) die PDF-Dateien nicht mehr im Browser anzeigt. Stattdessen erscheint eine Meldung, die das Speichern der Datei anbietet (direktes Öffnen nicht), allerdings mit dem Hinweis "The file you are downloading cannot be opened by the default program. It is either corrupted or it has an incorrect file type." Weiters wird empfohlen, aus Sicherheitsgründen den Download abzubrechen. Nicht sehr schön und für den DAU auch abschreckend.
Nach langer Suche habe ich den Tipp gefunden, vor dem Start der Session den session_cache_limiter manuell zu setzen (Default-Wert bei meinem Server: nocache).
Damit funktioniert es tatsächlich auch im Internet Explorer wieder (wobei mein Wissen für eine Erklärung hierfür nicht ausreicht...). Nun ergibt sich aber ein ganz anderes Problem. Aus offensichtlichen Gründen möchte ich kein Cachen dieser Dateien. Die Computer werden von mehreren Personen benutzt. Mit der obigen Lösung ist es möglich, die zuvor angezeigten Dateien einfach über die History des Browsers erneut anzuzeigen, auch nachdem man sich abgemeldet hat. Mein Skript (das den Zugriff in diesem Fall eigentlich korrekt verweigert) wird nicht ausgeführt.
Nun habe ich erst damit begonnen, mit verschiedenen Werten für den Aufruf von session_cache_limiter() zu spielen, ohne Erfolg. Dann habe ich versucht, verschiedene Header mitzuschicken, die das Cachen verbieten, z.B. (die letzten beiden Zeilen):
Das führt aber leider wieder dazu, dass der IE die Datei nicht im Browser anzeigt. Durch Ändern der Reihenfolge und andere Varianten wurde es sogar noch schlimmer (=> Firefox zeigt die Dateien im Quelltext an, trotz transfer encoding "binary" etc.).
So langsam bin ich mit meinem Latein am Ende. Sollte jemand noch eine Lösung wissen oder Tipps für mich haben, wäre ich für jede Antwort sehr dankbar.
ich bin jetzt seit eineinhalb Tagen erfolglos auf der Suche nach einer Lösung für mein Problem und schließlich auf diese Seite gestoßen. Danke erstmal an die Betreiber für diese Plattform, und vielleicht weiß ja auch jemand eine Lösung für mich.
Was ich will: in einem geschützten Mitgliederbereich sollen angemeldeten Benutzern Dokumente mit sensiblen Daten zur Verfügung gestellt werden. Diese Dokumente liegen in einem per .htaccess geschützten Verzeichnis und werden per PHP durchgereicht. Mein zugehöriges Skript (schickt die Datei per "Content-disposition: inline;" an den Client) funktioniert wunderbar mit allen Browsern, die ich unterstützen möchte.
Die Probleme traten nun auf, als ich per Session-Handling sicherstellen wollte, dass der zugreifende Benutzer auch wirklich korrekt angemeldet ist. Das Starten der Session per
PHP-Code:
session_start();
Nach langer Suche habe ich den Tipp gefunden, vor dem Start der Session den session_cache_limiter manuell zu setzen (Default-Wert bei meinem Server: nocache).
PHP-Code:
session_cache_limiter('public');
session_start();
Nun habe ich erst damit begonnen, mit verschiedenen Werten für den Aufruf von session_cache_limiter() zu spielen, ohne Erfolg. Dann habe ich versucht, verschiedene Header mitzuschicken, die das Cachen verbieten, z.B. (die letzten beiden Zeilen):
PHP-Code:
header("Content-Type: application/pdf");
header("Content-Length: $len");
header("Content-transfer-encoding: binary");
header("Cache-Control: no-cache, must-revalidate");
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
So langsam bin ich mit meinem Latein am Ende. Sollte jemand noch eine Lösung wissen oder Tipps für mich haben, wäre ich für jede Antwort sehr dankbar.
Kommentar