Jak zrobić stronę dostępną na hasło tylko dla wybranych użytkowników.doc

(31 KB) Pobierz
[PHP] Jak zrobić stronę dostępną na hasło tylko dla wybranych użytkowników

[PHP] Jak zrobić stronę dostępną na hasło tylko dla wybranych użytkowników?

Problem

Chcesz udostępnić stronę wyłącznie dla wybranych użytkowników, którzy muszą podać prawidłowy login i hasło. Nie chcesz korzystać z pliku .htaccess i innych ustawień serwera.

Sprawdź jak wygląda strona dostępna na hasło - wejdź
login: "janek", hasło: "kowalski"

Rozwiązanie

Aby udostępnić wybrane zasoby na hasło, musisz do przeglądarki wysłać specjalny nagłówek, który umożliwi autoryzację. Poprawna autoryzacja możliwa jest na serwerach, gdzie PHP zainstalowane zostało jako moduł serwera Apache, a nie jako CGI (dla wersji CGI opisałem w osobnej poradzie logowanie z wykorzystaniem cookie - link na końcu tekstu).

Aby dowiedzieć się czy PHP działa jako moduł Apacha czy CGI użyj funkcji phpinfo(). Na górze strony zobaczysz wartość "Server API" - jeżeli będzie "Apache" to wszystko jest OK, jeżeli "CGI" to sposób nie zadziała.

Hasła można porównywać z zawartością bazy danych aby umożliwić zalogowanie się wielu użytkowników z różnymi loginami i hasłami. Oto co musisz umieścić na stronie PHP, aby była dostępna na hasło:

<?

$login="janek";

$haslo="kowalski";

 

if ($_SERVER["PHP_AUTH_USER"]<>$login or $_SERVER["PHP_AUTH_PW"]<>$haslo) {

  header("WWW-Authenticate: Basic realm=\"tajna strefa\"\n");

  header("HTTP/1.0 401 Unauthorized\n");

  echo "Brak autoryzacji!";

  exit;

}

?>

 

 

<!doctype html public "-//w3c//dtd html 4.0 transitional//en">

<html><head><meta http-equiv="content-type"

content="text/html; charset=iso-8859-2">

<title>Tajna strefa</title></head><body>

 

Ok, udało Ci się wejść do tajnej strefy...

 

</body></html>

Ważna rzecz: przed wysłaniem jakichkolwiek nagłówków na stronie nie może wystąpić nawet spacja, dlatego skrypt musi się zacząć od samej góry strony. Gdy przeglądarka wyśle jakikolwiek inny znak, nagłówki nie przejdą i logowanie się nie powiedzie.

Warunek sprawdza, czy podane zmienne $_SERVER["PHP_AUTH_USER"] i $_SERVER["PHP_AUTH_PW"] są takie same jak login i hasło. Jeżeli nie, wysyłane są nagłówki, które wyświetlają okienko z prosbą o autoryzację. Jeżeli dane się zgadzają, użytkownik jest wpuszczany i pokazywana jest strona WWW znajdująca się dalej.

Jeżeli chcesz wykonać autoryzację dla wielu osób, możesz zmodyfikować lekko skrypt:

<?

$u[]="janek|kowalski";

$u[]="piotr|michalski";

$u[]="anna|kawowska";

 

foreach ($u as $uzytkownik) {

  $ue = explode("|", $uzytkownik);

  if ($_SERVER["PHP_AUTH_USER"]==$ue[0]

      and $_SERVER["PHP_AUTH_PW"]==$ue[1]) {

    $ok=1;

    break;

  }

 

if ($ok<>1) {

    header("WWW-Authenticate: Basic realm=\"tajna strefa\"\n");

    header("HTTP/1.0 401 Unauthorized\n");

    echo "Brak autoryzacji!";

    exit;

}

?>

 

<!doctype html public "-//w3c//dtd html 4.0 transitional//en">

<html><head><meta http-equiv="content-type"

content="text/html; charset=iso-8859-2">

<title>Tajna strefa</title></head><body>

 

Ok, udało Ci się wejść do tajnej strefy...

 

</body></html>

Zasada działania jest taka sama, natomiast została dodana pętla sprawdzająca, czy zalogowana osoba znajduje się w tablicy $u zaufanych użytkowników. Tablica składa się z loginu i hasła oddzielonych znakiem |.

W pętli foreach() pobierane są rekordy i rozbijane na osobne pola loginu $ue[0] i hasła $ue[1] oraz porównywane z wpisanymi. Jeżeli się zgadzają, pętla jest przerywana (break;), a zmienna $ok ustawiana jest na 1, co zapobiega ponownemu wyświetlaniu pytania o login i hasło.

Oczywiście użytkownicy mogą być też wpisaniu do pliku txt lub bazy danych, mechanizm autoryzacji wygląda wtedy podobnie.

 

...
Zgłoś jeśli naruszono regulamin