Hello,
Warum hältst du Sessions hier für einen guten Ort der Ablage?
Wenn eine Datei dazu gekommen ist seit dem letzten Listen, muss der User sowieso erst die Liste aktualisieren lassen. Dabei wird dann Verzeichnis-Array in der Session gelöscht und ein neues aufgebaut.Halten wir fest: Statt nur zu scannen und auszugeben, muss bei Ausgabe der Liste jedes mal das Scanergebnis zusätzlich in die Session gedumpt werden. Für jeden Client!
a) Derartige Aktionen würde ich ohne Authentifizierung sowieso nicht zulassen.
b) Für die Authentifizierung beiten sich nur HTTP Basic Auth und Sessions (mit Cookies) an.
Ich tendiere hier zu Sessions.
c) Wenn eine Session eröffnet ist, wird das $_SESSION-Array ohnehin beim Script-Exit in die
Sessiondatei zurückgeschrieben.
d) ein
$_SESSION['filesearch'] = glob( ...);
ist der einfachste Weg, das Ergebnis der (gefilterten) Suche abzulegen, um es dann
anschließend der Ausgabefunktion zu übergeben (Listenelemente für HTML aufbauen)
Der Eintrag in der Session ist praktisch, weil dadurch eine Transformation zur Entkopplung der wahren Dateipfade von den dem Browser gelieferten Ressourcennamen möglich ist...
Abseits der Frage, ob es sinnvoll ist: Es gibt viele Möglichkeiten, um von dir beschriebenes zu erreichen, das ist keine Frage des Speicherorts.
Hier irrst Du. Der praktischste Speicherort für eine Übersetzungsliste in einem authentifizierten Client-Server-Dialog ist die Sessiondatei. Über die Sessiondatei sind diese Daten dann automatisch kit dem Client in Verbindung zu bringen. WIr erinnern uns: HTTP ist von Haus aus zustandslos, ein gestaffelter Dialog ist aber zustandsorientiert. Durch die Session wird diese Zustandsorientierung herbeigeführt.
Man spart sich damit einen Filesystem-Scan, der ja zur Erstellung der Liste notwendig wäre.
das sollte heißen: ...der ja bei der Erstellung der Liste ohnehin durchgeführt wurde und daher beim Request zum Download nicht unbedingt ein zweites Mal durchgeführt werden muss.
Liest sich gut, stimmt aber nicht(siehe oben)!
Wieso stimmt das nicht?
Wieso soll eine Information weggeschmissen werden, die ich später nochmal benötige?
Der Ablauf ist:
Dokument 1:
bietet das Scannen von Dateien an.
Dokument 2 (überschreibt Dokument 1):
bietet die gescannte Liste an für den Download
und. einen Zurück-Link oder z.B. die Standardnavigation
Dokument 3 (eigenes Fenster für den Download-Dialog):
liefert das angeforderte File aus
Die Liste (Dokument 2) kann dabei solange stehen bleiben, bis der User meint, sie neu einlesen lassen zu müssen, weil sich etwas geändert haben könnte.
und zur Feststellung, ob die angeforderte Datei wirklich im erlaubten Verzeichnis liegt, sonst notwendig wäre.
Dafür braucht es keinen Scan, sondern einen simplen Test.
So, nun möchte ich den _einfachen_ Test sehen, mit dem festgestellt wird, ob die Datei dem User zusteht!
Um das nochmals in Erinnerung zu bringen:
Mein obiger Vorschlag ist nur für sessionorientierte Rechteverwaltung (Login/Rechteprüfung bei Sessionstart) sinnvoll, nicht jedoch bei requestbasierten (Login/Rechteprüfung bei jedem Request).
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg