webForumDet fria alternativet

Endast en session till en fil ska vara tillåten

PHP

1 svar · 243 visningar · startad av Riddis

Medlem sedan mars 20057 inlägg
Frågan#1

Hejsan alla kodare :)
Följande script använder jag för nedladdning av filer:

<?php
if(isset($_GET["id"])) {
$_GET["id"]=intval($_GET["id"]);
}
else {
die ("SORRY!!");
}

$fil\[1\]="filen.zip";

$exp=explode(".",$fil[$_GET["id"]]);
$r=count($exp);
$namn = basename($fil[$_GET["id"]]);
$data=file_get_contents($fil[$_GET["id"]]);
$len = strlen($data);

header("Content-Disposition: attachment; filename=\"".$namn."\"");
header("Content-Length: ".$len);
echo $data;

?>

sedan anropning: filhamtning.php?id=1

Anledning till detta är att jag vill gömma vilka filer det är.
Men likaså för att endast detta ska gå köra en nedladdning från respektive "nerladdare".
Nu ligger problemet i att det fortfarande går klistra in adressen "filhamtning.php?id=1" i t.ex. download accelerator och börja hämta med flera sessioner.
Går detta låsa så endast en session från respektive användare är tillåten?

Vill samtidigt passa på att tacka min gode vän Stefan för den hjälp han ger mig gällande php =)

Medlem sedan maj 200517 inlägg
#2

tja, du skulle kunna ha ngt i stil med

touch("/tmp/" . $SESSION_ID); (bereonde på hur du sätter session id)

och sedan innan du tillåter nedladdningen så kollar du om den filen finns

grejjen är ju den att du inte riktigt kan kontrollera NÄR personen i fråga laddat klart en fil, så det är långt ifrån en bra eller perfekt lösning. det du kan göra är att du kan plocka bort alla filer i /tmp/ (som tillhör scriptet då) efter kanske 2 minuter.

så alla filer som är äldre än 2 minuter plockas bort, du kan enkelt göra detta med find (om du kör *nix) via exec()

260 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
118 ms — deklarationer (db)
0 ms — hämta statistik (cache)
137 ms — hämta tråd, inlägg och bilagor (db)
119 ms — ändringar (db)