BLOG

Skrypt logowania z wykorzystaniem PHP i bazy MySQL

26.03.2013 r.
15:31
Skrypt logowania z wykorzystaniem PHP i bazy MySQL
W poniższym artykule zaprezentuję przykładowy mechanizm logowania, który z powodzeniem można wykorzystać do zabezpieczenia treści na waszych stronach WWW przed nieautoryzowanym dostępem.

Spójrzcie na algorytm skryptu:

  • Formularz logowania (login + hasło)
  • Połączenie z bazą danych
  • Sprawdzenie loginu i zaszyfrowanego hasła
  • Zarejestrowanie sesji lub informacja o błędzie logowania

Przed utworzeniem formularza należy utworzyć odpowiednią tabelę w bazie danych, do której będziemy się podłączać:

	CREATE TABLE IF NOT EXISTS `user` (
	  `id_user` smallint(6) NOT NULL AUTO_INCREMENT,
	  `login` varchar(128) COLLATE utf8_polish_ci NOT NULL,
	  `password` varchar(128) COLLATE utf8_polish_ci NOT NULL,
	  PRIMARY KEY (`id_user`)
	) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_polish_ci AUTO_INCREMENT=2 ;

	INSERT INTO `user` (`id_user`, `login`, `password`) VALUES
	(1, 'admin', '21232f297a57a5a743894a0e4a801fc3');

Na powyższym kodzie tworzymy tabelę o nazwie user a w nim pola z identyfikatorem, loginem i hasłem. Następnie dodajemy użytkownika o loginie admin i zaszyfrowanym za pomocą funkcji md5() haśle. Hasło jest takie samo jak login, czyli admin. Zaszyfrować dowolne hasło możecie np. korzystając z formularza na stronie http://www.adamek.biz/md5-generator.php

1. Formularz logowania (login + hasło)

W pliku index.php tworzymy prosty formularz logowania, zawierający dwa pola (login i password) oraz przycisk Zaloguj.

	<?php session_start();
		  require_once('db.php');
	?>
	<html xmlns="http://www.w3.org/1999/xhtml">
	<head>
	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
	<link href="css/style.css" rel="stylesheet" type="text/css" />
	<title>Skrypt logowania z wykorzystaniem PHP i bazy MySQL
	<meta name="description" content="Kurs jQuery" />
	<meta name="keywords" content="kurs, jquery, mlaskowski.pl" />
	</head>

	<body>
	  
Login:
Hasło:
</body> </html>

W pierwszej linijce dodajemy funkcję session_start(), która aktywuje sesje na naszej stronie. Następnie dołączamy plik db.php, który ma za zadanie połączyć się z naszą bazą danych (patrz kod poniżej). W dalszej części pliku widnieje formularz logowania.

2. Połączenie z bazą danych

Przyjrzyjmy się teraz plikowi db.php

  /*Połączenie z bazą danych*/
  $dbhost = 'localhost'; 	
  $dblogin = 'root';
  $dbpass = '';
  $dbselect = 'kursy';
  mysql_connect($dbhost,$dblogin,$dbpass);
  mysql_select_db($dbselect) or die("Błąd przy wyborze bazy danych");
  mysql_query("SET CHARACTER SET UTF8");

Uzupełniamy host, login oraz hasło logowania do bazy i podajemy nazwę bazy danych, w której znajduje się tabela user.

3. Sprawdzenie loginu i zaszyfrowanego hasła oraz 4. Zarejestrowanie sesji lub informacja o błędzie logowania

Modyfikujemy nasz plik index.php

  <?php
    /* jeżeli nie wypełniono formularza - to znaczy nie istnieje zmienna login, hasło i sesja auth
     * to wyświetl formularz logowania
     */
    if (!isset($_POST['login']) && !isset($_POST['password']) && $_SESSION['auth'] == FALSE) {
  ?>
  
      
Login:
Hasło:
<?php } /* jeżeli istnieje zmienna login oraz password i sesja z autoryzacją użytkownika jest FALSE to wykonaj * skrypt logowania */ elseif (isset($_POST['login']) && isset($_POST['password']) && $_SESSION['auth'] == FALSE) { // jeżeli pole z loginem i hasłem nie jest puste if (!empty($_POST['login']) && !empty($_POST['password'])) { // dodaje znaki unikowe dla potrzeb poleceń SQL $login = mysql_real_escape_string($_POST['login']); $password = mysql_real_escape_string($_POST['password']); // szyfruję wpisane hasło za pomocą funkcji md5() $password = md5($password); /* zapytanie do bazy danych * mysql_num_rows - sprawdzam ile wierszy odpowiada zapytaniu mysql_query * mysql_query - pobierz wszystkie dane z tabeli user gdzie login i hasło odpowiadają wpisanym danym */ $sql = mysql_num_rows(mysql_query("SELECT * FROM `user` WHERE `login` = '$login' AND `password` = '$password'")); // jeżeli powyższe zapytanie zwraca 1, to znaczy, że dane zostały wpisane poprawnie i rejestruję sesję if ($sql == 1) { // zmienne sesysje user (z loginem zalogowanego użytkownika) oraz sesja autoryzacyjna ustawiona na TRUE $_SESSION['user'] = $login; $_SESSION['auth'] = TRUE; //przekierwuję użytkownika na stronę z ukrytymi informacjami echo '<meta http-equiv="refresh" content="1; URL=hide.php">'; echo '<p style="padding-top:10px;">Proszę czekać...
trwa logowanie i wczytywanie danych

'; } // jeżeli zapytanie nie zwróci 1, to wyświetlam komunikat o błędzie podczas logowania else { echo '

Błąd podczas logowania do systemu
'; echo 'Wróć do formularza

'; } } // jeżeli pole login lub hasło nie zostało uzupełnione wyświetlam błąd else { echo '

Błąd podczas logowania do systemu
'; echo 'Wróć do formularza

'; } } ?>

Wszystkie informacje na temat działania skryptu zostały zawarte w komentarzach na listingu powyżej, więc nie będę ich komentował.

Pozostało nam jedynie zabezpieczyć treść w pliku hide.php przed nieautoryzowanym dostępem.

	<?php session_start();
		  require_once('db.php');
	?>
	<html xmlns="http://www.w3.org/1999/xhtml">
	<head>
	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
	<link href="css/style.css" rel="stylesheet" type="text/css" />
	<title>Skrypt logowania z wykorzystaniem PHP i bazy MySQL
	<meta name="description" content="Kurs jQuery" />
	<meta name="keywords" content="kurs, jquery, mlaskowski.pl" />
	</head>

	<body>
	  
	  <?php if ($_SESSION['auth'] == TRUE) {
			  echo 'UKRYTA TREŚĆ!
'; } else { echo '<meta http-equiv="refresh" content="1; URL=index.php">'; echo '<p style="padding-top:10px;">Próba nieautoryzowanego dostępu...
trwa przenoszenie do formularza logowania

'; } ?> </body> </html>

Sprawdzamy, czy zmienna sesyjna auth jest ustawiona na TRUE. W przeciwnym wypadku przekierowuję do formularza logowania.

5. Wylogowanie użytkownika

Aby dopełnić nasz skrypt dodajmy na podstronie hide.php odnośnik, który umożliwi użytkownikowi wylogowanie się z części zamkniętej.

  <?php if ($_SESSION['auth'] == TRUE) {
          echo 'UKRYTA TREŚĆ!
'; echo 'Wyloguj się'; } else { echo '<meta http-equiv="refresh" content="1; URL=index.php">'; echo '<p style="padding-top:10px;">Próba nieautoryzowanego dostępu...
trwa przenoszenie do formularza logowania

'; } ?>

W pliku index.php dopisujemy kod, który obsłuży wylogowywanie:

	// jeżeli sesja auth jest TRUE to przekieruj na ukrytą podstronę
	elseif ($_SESSION['auth'] == TRUE && !isset($_GET['logout'])) {
		echo '<meta http-equiv="refresh" content="1; URL=hide.php">';
		echo '<p style="padding-top:10px;">Proszę czekać...
trwa wczytywanie danych

'; } // wyloguj się elseif ($_SESSION['auth'] == TRUE && isset($_GET['logout'])) { $_SESSION['admin_user'] = ''; $_SESSION['admin_auth'] = FALSE; echo '<meta http-equiv="refresh" content="1; URL=index.php">'; echo '<p style="padding-top:10px;">Proszę czekać...
trwa wylogowywanie

'; }

Podsumowanie

Mając podstawę możecie teraz swobodnie rozwijać skrypt dodając np. takie informacje jak rejestrowanie logowania, formularze rejestracji nowych użytkowników, skuteczniejsze szyfrowanie haseł itp.

Skrypt  dostępny do pobrania: http://mlaskowski.pl/kursy/skryptLogowania/skryptLogowania.rar

 

Tagi: php,mysql,sql,gotowe rozwiązania,formularz logowania,logowanie,autoryzacja
Czytane: 139214 razy

comments powered by Disqus