PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : session_start() und header()


Dr.Doom
2003-02-18, 23:31:37
Howdy,
folgendes Problem:
Ich möchte eine PHP-Seite/Skript haben, die man nur mit vorheriger Anmeldung betreten kann -> Sessions.
Zusätzlich soll es einen Deeplink-Schutz geben, der direktes Downloaden von Dateien verhindern soll.
Das Nodeeplink-Skript habe ich hier irgendwo im Forum gefunden:

//@session_start();
[...]
$download = $_GET['download'];
$basedir = "/usr/local/WWW/";
$filelist = array(
"file1" => "area1/datei1.zip",
"file2" => "area2/datei2.zip",
"file3" => "area3/datei3.zip"
);
if (!isset($filelist[$download]))
die("Datei $download nicht vorhanden.");
$filename = sprintf("%s/%s", $basedir, $filelist[$download]);

header("Content-Type: application/octet-stream");
$save_as_name = basename($filelist[$download]);
header("Content-Disposition: attachment; filename=\"$save_as_name\"");
readfile($filename);
[...]


Das Dumme dabei ist, dass beide "Sachen" (Session/Deeplinkschutz) 'header' verwenden. Sessions alleine, ohne Deeplinkschutz, funktioniert, genauso wie der Deeplinkschutz ohne Sessions funktioniert.
Beides zusammen funktioniert aber NICHT. :(

Wie bekomme ich es hin, dass beides zusammen DOCH funktioniert!?

Aqualon
2003-02-23, 16:16:37
Hi!

Kannst du mal ne genauere Fehlerbeschreibung liefern?

Also welche Fehlermeldung PHP im Fall von gleichzeitiger Verwendung und Sessions ausgibt.

Aqua

Unregistered
2003-02-23, 20:07:41
PHP selber gibt keine Fehlermeldung aus.

Wenn das Skript oben abgearbeitet wird und zum readfile(..) kommt, dann öffnet sich ein Dialog zum Speichern der Datei (Name eingeben, Speichern- und Abbrechen-Button, etc.).
Drückt man auf Speichern, dann kommt nur eine Meldung, dass die angegebene Datei auf dem Server nicht gefunden wurde.

Kommentiert man aber die Zeile session_start(); (vgl. Skript im Startposting) aus, dann funktioniert der Dateidownload - ohne weitere Änderung des Skripts - tadellos!

Aqualon
2003-02-24, 10:19:45
Schau mal ob eine der im Skript verwendeten Variablen schon vorher in der Session registriert wird.

In dem Fall würde PHP u.U. den falschen Wert für eine Variable übernehmen und das Skript deswegen fehlschlagen.