2012-04-01 4 views
7

Angenommen, Benutzer A hat einige Bilder in seinem Konto in Facebook, die er nach dem Login sehen kann.schränken den Zugriff auf Bilddateien für angemeldete Benutzer nur in PHP

Wenn sich Benutzer A abmeldet und die URL eines dieser Bilder ausprobiert wird, wird die Meldung 'Zugriffsbeschränkung' angezeigt.

Denken Sie an eine Social-Networking-Site in PHP gebaut.

Wie erreichen Sie diese Art der Kontrolle, so dass KEIN Bild angezeigt werden kann, ohne sich auf der Website einzuloggen, genauso wie Facebook?

Antwort

12
  • Verschieben Sie alle Bilder in einen Ordner, auf den nicht über das Internet zugegriffen werden kann.
  • Implementieren Sie ein PHP-Skript (image.php), das überprüft, ob der Benutzer angemeldet ist und einen Bildnamen als Eingabe akzeptiert (z. B. image.php? Name = flower.png). mit readfile()http://php.net/manual/en/function.readfile.php
  • Wenn der Benutzer angemeldet ist, header()http://il2.php.net/manual/en/function.header.php (image/jpeg zum Beispiel)
  • Lesen Sie die Datei von der Festplatte des richtige Content-Type Bild senden und sie an den Benutzer senden.
  • Stellen Sie sicher, dass Personen nicht auf Dateien außerhalb des Bildverzeichnisses zugreifen können, indem Sie etwas wie /images.php?name=/etc/hosts senden (es wäre besser, eine Bild-ID anstelle eines Dateinamens zu akzeptieren, oder ein Hash des Dateinamens, können Sie md5()http://il2.php.net/manual/en/function.md5.php verwenden, um den Hash zu generieren, aber denken Sie daran, die Bilddateien entsprechend ihren MD5-Hashes zu benennen, in diesem Fall suchen Sie die Bilddatei immer nur im Verzeichnis images).
  • Wenn der Benutzer nicht angemeldet ist, können Sie ein benutzerdefiniertes Bild senden, das "Bitte anmelden" enthält oder das Skript beenden.
+0

Angenommen, die Bild-URL ist mysite.com/images/img.jpg. Wenn diese URL gefunden wird, wird das Skript image.php ausgeführt/ –

+0

Das 'src' Attribut des Bildes sollte sein: mysite.com/image.php?name=img.jpg also wird das Skript image.php die Zugriff auf die Bilddatei und nur anzeigen, wenn der anfragende Benutzer eingeloggt ist. Wenn er/sie nicht eingeloggt ist, sollte das Skript die Ausführung beenden, andernfalls sollte das Skript 'readfile '(' path/images/img. jpg ') ', um das Bild an den Benutzer zu senden (vergessen Sie auch nicht,' header() 'zu verwenden, um den richtigen Inhaltstyp festzulegen. – Yaniro

+0

Wenn die URL mysite.com/images/img.jpg ist, was src Attribut wird es versuchen zu lesen? –

Verwandte Themen