Autor: Daniel Krysiak

Artykuł opisuje w jaki sposób ograniczyć dostęp do witryny użytkownikom niezalogowanym, oraz przedstawia prosty skrypt logowania oparty o bazę danych MySQL, oraz sesje (ciasteczka).

Wstęp

Zacznijmy od tego, w jaki sposób przypisać użytkownikowi status zalogowanego. Najprościej zastosować sesje. W skrócie polega to na wysłaniu użytkownikowi ciasteczka z unikatowym ID, dzięki czemu PHP pozwala tworzyć dla niego specjalne zmienne.

Opisywany skrypt wymaga:

1) Wstawiania:

<?php session_start(); ?> 

na sam szczyt dokumentu. Kod ten wysyła użytkownikowi wspomniane ciasteczko;

2) Połączenia z bazą danych MySQL – o MySQL można poczytać w tutaj.

Plik ze skryptemSkrypt logowania + opis instalacji można pobrać tutaj.

Funkcja wstawiająca formularz logowania/wylogowania:

function logowanie() { 
    
if($_SESSION['logowanie'] == 'poprawne') { 
    
   $string  = '<FORM action="'.getenv(REQUEST_URI).'" method="post">'; 
      $string .= '   <INPUT type="submit" name="wylogowanie" value="Wyloguj">'; 
      $string .= '</FORM>'; 
      
} else { 
   $string = '<FORM action="'.getenv(REQUEST_URI).'" method="post">'; 
      $string .= '<UL style="list-style-type: none; margin: 0; padding: 
0;">'; 
      
      if(isset($_SESSION['logowanie'])) $string .= 
'<LI>'.$_SESSION['logowanie'].'</LI>'; 
      
      $string .= '<LI>Login: <INPUT type="text" name="login"></LI>'; 
      $string .= '<LI>Haslo: <INPUT type="text" name="haslo"></LI>'; 
      $string .= '<LI><INPUT type="submit" name="logowanie" value="Logowanie"></LI>'; 
      $string .= '</UL>'; 
      $string .= '</FORM>'; 
      
} 
return $string; 
} 

Funkcja ta wstawia formularze umożliwiające logowanie (kod po else), lub wylogowanie (przed else).

Linia 13: Skoro $_SESSION[‚logowanie’] nie równa się ‚poprawne’, a jednak sesja istnieje, oznacza to, że przechowywuje błąd, więc zostaje on dołączony do stringu.

‚$_SESSION[‚logowanie’]’ jest opisane w dalszej części artykułu.

Logowanie

if(isset($_POST['logowanie'])) { 
   $dane = @mysql_query('SELECT login, haslo FROM uzytkownicy WHERE login = 
"'.$_POST['login'].'" AND haslo = "'.$_POST['haslo'].'"') or 
die(mysql_error()); 
    
   if(mysql_num_rows($dane) == 1) { 
      $_SESSION['logowanie'] = 'poprawne'; 
   } else { 
      $_SESSION['logowanie'] = 'Błędny login lub hasło!'; 
   } 
    
   unset($_POST['logowanie']); 
} 

1. Jeśli został wysłany formularz logowania…

3. Pobierz dane z bazy. \@\ zapobiega zwróceniu ewentualnego błędu przez PHP. Funkcja mysql_query() wykonuje zapytanie do bazy danych. Konstrukcja tego zapytania zakłada, że mamy pola ‚login’ i ‚haslo’ w tabeli ‚uzytkownicy’. Jeśli w Twojej bazie jest inaczej, zmień te nazwy. Zapytanie ma na celu zwrócenie rekordów gdzie pola login i haslo zgadzają się z danymi wysłanymi z formularza opisanego wcześniej. ‚or die(mysql_error());’ zwraca błąd bazy danych, jeśli taki wystąpi.

5. Funkcja mysql_num_rows() pobiera wynik zapytania (linia 3) i zwraca liczbę informującą o ilości rekordów w tym wyniku. Jeśli użytkownik podał poprawne dane, to baza zwróci 1 rekord -> jeśli w bazie jest użytkownik opisany podanymi danymi…

6. Zaloguj go poprzez przypisanie sesji ‚logowanie’ wartości ‚poprawne’.

7. Jeśli w bazie nie ma takiego użytkownika…

8. Przypisz sesji ‚logowanie’ wartość ‚Błędny login lub hasło!’.

11. Funkcja unset() usuwa zmienną – powoduje, że przestaje istnieć. Zabezpiecza to przed ponownym wykonaniem kodu po odświeżeniu strony.

Wylogowanie

if(isset($_POST['wylogowanie'])) {    
   unset($_SESSION['logowanie']); 
} 

1. Jeśli został wysłany formularz wylogowania…

3. Usuń sesję ‚logowanie’.

Wyznaczanie bloków dla zalogowanych i nie.

Podobnie jak zostało to zastosowane w funkcji logowanie(), tylko w sposób umożliwiający wygodne wstawienie kodu HTML.

<?php if($_SESSION['logowanie'] == 'poprawne') { ?> 
<!-- Jeśli zalogowany... --> 
<H3>Witam naszego użytkownika</H3> 
<?php } else { ?> 
<!-- Jeśli niezalogowany... --> 
<H3>Aby uzyskać pełen dostęp do serwisu musisz się zalogować</H3> 
<?php } ?> 

Inne

1. Całość prezentowanego kodu należy umieścić na szczycie dokumentu.

2. Aby wstawić w odpowiednim miejscu na stronie formularz logowania wpisz:

<?php echo logowanie(); ?> 

3. Jeśli chcesz by po zalogowaniu użytkownik został przeniesiony do innej strony użyj funkcji header().

Daniel Krysiak

Pajączek.pl - twórz poprawiaj publikuj