2009-07-25 18 views
8

Potrzebuję pomocy w tworzeniu systemu profili użytkowników. Chcę, żeby był jak Facebook lub Myspace, gdzie ma tylko nazwę użytkownika po adresie, bez znaków zapytania lub czegokolwiek, na przykład www.mysite.com/username. Mam wszystkie rejestry, skrypty logowania, itp. Wszystko gotowe, ale jak mam przejść do profili używając powyższego adresu URL, "/ nazwa użytkownika"?Jak tworzyć profile użytkowników za pomocą PHP i MySQL

Odpowiedz

6

Należy utworzyć przepisanie mod, które zajęło pierwszy katalog i przekazane jako parametr $ _GET.

Spróbuj tego:

RewriteEngine On 
RewriteBase/

RewriteCond %{REQUEST_FILENAME} -f [OR] 
RewriteCond %{REQUEST_FILENAME} -d 
RewriteRule ^(.*)/$ index.php?user=$1 

To powinno przepisać niczego po user = katalogu

+0

To brzmi skomplikowanie? – Spyderfusion02

+0

Właściwie ... dość proste. Po prostu umieść to w .htaccess w katalogu głównym. –

+0

Próbuję uzyskać poprawną regułę. Daj mi chwilkę. –

2

'/' jako index.php Spójrz na rewrite engine. Niektóre frameworki mają również klasy do wykonywania tej pracy, tak jak Zend Framework ma Zend_Router, z której możesz korzystać. Możesz użyć tego samodzielnie, inne frameworki również je mają, sprawdź dokumentację pod kątem preferowanego smaku.

4

Oto skrócona wersja mojego odpowiedź, na wypadek gdyby ktoś taki moment tldr:

  1. Utwórz katalog o nazwie „użytkownicy”.
  2. Wewnątrz tego katalogu, zrób plik .htaccess z następującą mod_rewrite:

    REQUEST_URIRewriteEngine on

    RewriteRule !\.(gif|jpg|png|css)$ /your_web_root/users/index.php'REQUEST_URI

Teraz wszystkie żądania strony dla dowolnych rozszerzeniach nie w nawiasie dokonanych użytkowników katalog przejdzie do index.php

index.php pobiera adres URL, który użytkownik umieścił, i chwyta bit za koniec. Istnieje mnóstwo sposobów robienia tego, oto prosty na jeśli znasz ostatnią część zawsze będzie nazwa użytkownika, a nie może, nazwa_użytkownika/fotki /:

$url_request = $_SERVER['REQUEST_URI']; //Returns path requested, like "https://stackoverflow.com/users/foo/" 
$user_request = str_replace("https://stackoverflow.com/users/", "", $url_request); //this leaves only 'foo/' 
$user_name = str_replace("/", "", $user_request); //this leaves 'foo' 

Teraz wystarczy zrobić zapytanie do DB dla tej nazwy użytkownika. Jeśli istnieje, index.php wyprowadza profil, jeśli nie ma go przekierować do: /users/404.php

Ale jeśli użytkownik istnieje, to wszystko, co zobaczy użytkownik, to

www.example.org/users/foo/ 

i dostali się do strony użytkownika foo.

Nie można pobierać zmiennych, które haker może wykorzystać, i ładnych, łatwych do umieszczenia na innym blogu lub wizytówce URL.


Właściwie można pozbyć się "?" i ładnie prosty www.example.org/users/someusername.

Dowiedziałem się o tym w artykule Till Quack "How to Succeed with URLs" na A List Apart.

Musisz więc zrozumieć Apache, .htaccess i mod_rewrite, a ta metoda wymaga zrozumienia zagrożeń bezpieczeństwa i konta dla nich.Oto podstawowy pomysł:

Tworzysz katalog o nazwie "użytkownicy" (nie musisz tego robić, ale to uprości całą sprawę), aw tym katalogu umieścisz swój plik .htaccess zawierający mod_rewite skutecznie mówi "wszystkie pliki lub żądania katalogowe, które nie są pewnego rodzaju (obrazy, pliki pdf) powinny być wysyłane do tego skryptu, który zajmie miejsce, gdzie wysłać użytkownika." Mod_rewrite z artykułu wygląda następująco:

RewriteEngine on 
RewriteRule !\.(gif|jpg|png|css)$ /your_web_root/index.php 

W moim przykładzie byłoby to „/your_web_root/users/index.php”, dlatego, że to jest bardziej proste, ponieważ zamiast tego skryptu obsługi wszystkich żądań na własną strona, zajmuje się tylko tymi w katalogu użytkownika.

Następnie masz skrypt php, który mówi "dobra, jaki był adres URL?" i w zasadzie chwyta część po ostatnim końcowym ukośniku (lub dwóch, jeśli jest jeszcze jeden na samym końcu), i SANITIZUJE to, co znajduje (to naprawdę ważne) i mówi "czy ta nazwa użytkownika istnieje w moim DB?" Jeśli tak, wysyła requestera do profilu użytkownika, ale z ładnym adresem URL (dojdziemy do tego w ciągu sekundy), jeśli nie, wysyła go na stronę "Nie znaleziono użytkownika" lub cokolwiek chcesz.

Więc jeśli znajdzie twojego użytkownika, skrypt PHP wyświetli profil użytkownika (Znowu, upewnij się, że go odkażasz.) Każdy użytkownik, który może coś zrobić, może - jeśli dajesz mu taką możliwość - osadzić złośliwy kod w ich własny profil, wiedząc, że przeglądarki przeglądające profil wykonają ten kod). Od żądanej strony było:

www.example.org/users/example_user 

a ponieważ używasz mod_rewrite zamiast przekierowania URL pozostaje taka sama i skrypt że plik .htaccess podciąga właśnie zrzuca profil użytkownika. Odwiedzającemu, widzą, że wstawili powyższy adres URL, a profil użytkownika pojawił się.

Chcesz również skrypt PHP, który sprawdza, czy użytkownik przekierowuje na stronę "Nie znaleziono użytkownika", zamiast po prostu wypisuje stronę "user_not_found". Jest to więc ktoś, kto wykłada:

www.example.org/users/blabhaboehbohe 

ujrzy zmianę adresu URL do

www.example.org/users/notfound/ 

zamiast widząc URL pozostają takie same. Jeśli haker zauważy, że adres URL się nie zmienia, teraz wiedzą, że używasz mod_rewrite, a zatem musi istnieć skrypt obsługujący rzeczywiste wyjście. Jeśli o tym wiedzą, mogą zacząć zwariować, szukając każdej luki w zabezpieczeniach, którą możesz pozostawić otwartą.

okrzyki.

Powiązane problemy