[PHP] Nerladdning enbart som inloggad

Permalänk
Medlem

[PHP] Nerladdning enbart som inloggad

Jag funderar på hur man kan ladda ner något från en sida utan att behöva ge en url. Det är ju många större nerladdningssidor som använder detta system för att folk ska kolla in reklamen innan de tankar ner hellre än att bara skriva in en url till filen i sig.

Grejen är att man bara ska kunna ladda ner filer om man är inloggad på sidan - och inte kunna ge bort en url man ser (som inloggad) på sidan till vem som helst.

Kan någon peka mig i rätt riktning? Funktioner eller tanken bakom.

Tack på förhand.

Permalänk
Medlem

en ifsats som frågar om användaren är inloggad eller inte (databas?)

om man är det = skriv ut länken

om man inte är det = skriv ut en registreringssida

så kanske ??

för att undvika att någon delar med sig av URLen kan man generera en tillfällig url som bara varar en kort stund eller flagga att användaren redan har laddat ner filen en gång

Visa signatur

Har varit på detta forum på tok för länge...

Permalänk
Medlem

Då kan ju vilken inloggad som helst ge bort urlen till vem som helst och dessa kommer inet behöva logga in...
"och inte kunna ge bort en url man ser (som inloggad) på sidan till vem som helst."

Permalänk
Medlem

kolla om sessionsid stämmer med den utdelade URL-ens id ??

låt oss säga att nisse loggar in och han ser en länk (sessionsid)

den länken skickas till pelle via icq och han fösöker använda den

då stämmer inte hans sessionsid med nisses och det hela avbryts

för att ytterligare öka säkerheten kan du plocka nisses IP och generera en fin länk

stämmer inte IP med olles så är det en ogiltig länk

OBS - jag spånar fritt - hoppas det kan hjälpa till

Visa signatur

Har varit på detta forum på tok för länge...

Permalänk
Medlem

Tack för förslagen, men nu fick jag ett tips från en polare.
Det går tydligen göra med enbart header() och readfile().

(verkar det som)

Permalänk
Medlem

Look ma! A code snippet!

if ($access_ok) { header("Expires: Fri, 1 Sep 1970 01:10:00 GMT"); header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); header("Content-type: application/x-download"); header("Content-Disposition: attachment; filename=$filename"); header("Content-Transfer-Encoding: binary"); $f = fopen($filepath, "r"); if (!$f) die("File not found"); while (!feof($f)) { echo fread($f, 1024); flush(); } fclose($f); } else { die("You do not have access to this file"); }

kan du tyda principen tro?

edit: readfile() ska du inte använda, den ballar ur om filerna är större än ett fåtal MiB.

Visa signatur

Har du nhGPS? kolla detta.
Fotograferar lite ibland när jag har tid. Annars jobbar jag som fotograf.

Permalänk
Medlem

*lånar tråden lite*

Någon som vet en länk eller kan skicka ett script till mig om detta ?
behöver hjälp med samma sak...är inte så duktig på php än, lär mig...

Visa signatur

Mom! KDE and GNOME are fighting again! And Linus is taking KDE's side!
If you kids don't shut up, you're going to go to bed without your supper!

Permalänk
Medlem

Om ni använder pixas exempel så kan det även vara bra att använda en .htaccess-fil innehållande deny from all i katalogen för filerna så att man inte kan gissa sig fram till katalog och filnamnet. Sen bör man inte behöva göra något mer. Filen går inte att komma åt direkt via en "korrekt" länk, utan måste läsas från php-koden som då har strikt koll på användarrättigheter.

/Niclas

Visa signatur

Har bytt namn från: nulleman ~ Blogg: http://skorpion.se
MacBook Pro: 15.4' ~ 1.83GHz ~ 1512MB RAM ~ 80GB HDD
Medlem i signaturen blodtörstiga Appleanvändare

Permalänk
Medlem

Tackar folket, jag hade greppat principen bara jag läste lite phpmanual om header() men tack för tipset om fread/readfile.

Permalänk

Det smartaste i min åsikt vore att lagra filerna utanför WWW-roten, på så vis måste man använda ett php-script som skickar filen till användaren, i samma script kan man också kolla om de är inloggad eller inte.

Här är ett urgammalt projekt som aldrig blev klart som visar hur jag skickade filen utanför webbroten.

(koden falerar dock för att forumet tar bort mina escapade \)

<?php include("conn.php"); if($_GET['d'] && is_numeric($_GET['d'])) { $img = array('jpg','jpeg','jpg','png','gif','bmp'); $strQuery= mysql_query(" SELECT * FROM fildata WHERE id='".$_GET['d']."' ")or die(mysql_error()); $r = mysql_fetch_array($strQuery); $r['klick']+=1; $strQuery = mysql_query(" UPDATE fildata SET klick='".$r['klick']."' WHERE id='".$_GET['d']."' ")or die(mysql_error()); $filename = "d:\\userfiles\\".$r['file']; $handle = fopen($filename, "r"); $data = file_get_contents($filename); fclose($handle); if(in_array($r['ext'],$img)) { header("Content-type: image/".$r['ext']."; filename=".$r['file']." "); header("Content-Disposition: filename=".$r['file']." "); //header("Content-Disposition:inline; filename=".$r['file'].""); echo $data; } header("Content-type: application/octet-stream; name=".$r['file'].""); header("Content-Disposition:attachment; filename=".$r['file']." "); echo $data; } ?>

Visa signatur

Asus Maximus II formula, E8400 @ 3.9GHz, 4GB Dominator DDR2, Radeon HD4850.

Permalänk
Medlem

Denna är enkel och lätt att modifiera med att fungera med inloggning:

http://www.bhsdesign.com/page.php?id=482

Visa signatur

Hur kan syltkakor överleva i det vilda utan ögon?

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av UndCon
för att undvika att någon delar med sig av URLen kan man generera en tillfällig url som bara varar en kort stund eller flagga att användaren redan har laddat ner filen en gång [/B]

Det där gjorde jag i ett utav mina experiment förr.
Jag hade i php gjort en sida som genererade en länk, med nerladdarens krypterade IP-nummer och krypterad time-stamp och inloggnings "check" och det fungerade utmärkt, länken slutade fungera efter nån timme, och skicade man länken till nån annan så gick det inte så bra längre. Sen förvandlade php filen sig till den fil man skulle ha ;P