Newsletter
E-Mail:
Mój profil
Login:

Hasło:

Nie masz konta? Zarejestruj się!
Statystyki
Użytkowników: 19
Artykułów: 20
Komentarzy: 19
Skryptów: 4
Gości online: 2
Użytkownicy online: brak




Wykonamy strony dla firm, osób prywatnych, klubów sportowych, itp. Od prostej wizytówki dla firmy, przez hobbystyczny wortal po bardziej skomplikowane portale, choćby społecznościowe. Oferumy również wykonanie profesjonalnej grafiki. Kontakt gg: 6025719, email: lukiradom@gmail.com. Portfolio: freelancemedia.pl.



Drukuj

Logowanie i rejestracja w PHP, czyli sesje oparte na ciasteczkach


Podczas prowadzenia strony www, częto myślimy o stworzeniu jakiejś komunikacji między użytkownikami, czy po prostu chcemy udostępnić pewne treści dla zalogowanych użytkowników. Czasami też chodzi nam o ograniczenie transferu, aby przypadkowy internauta nie ładował większych plików, np. zdjęcia, awatary, pliki z downloadu. W tym artykule przedstawię Wam dość prosty, ale też dość bezpieczny system rejestracji i logowania oraz przedstawię Wam dwie funkcje, które wyświetlają treści dla użytkowników zalogowanych i niezalogowanych. Będziemy korzystać z bazy MySQL.

Zaczniemy od skryptu rejestracji. Po pierwsze, formularz:
	
		<form method="post" action="rejstruj.php">
  <table cellpadding="2" cellspacing="2">
    <tbody>
      <tr>
        <td style="width: 198px;">Login:</td>
        <td style="width: 254px;"><input name="login"></td>
      </tr>
      <tr>
        <td style="width: 198px;">E-mail:</td>
        <td style="width: 254px;"><input name="email"></td>
      </tr>
      <tr>
        <td style="width: 198px;">Hasło:</td>
        <td style="width: 254px;"><input name="haslo" type="password"></td>
      </tr>
      <tr>
        <td style="width: 198px;">Powtórz hasło:</td>
        <td style="width: 254px;"><input name="haslo2" type="password"></td>
      </tr>
    </tbody>
  </table>
  <input name="rejestruj" value="Rejestruj"
 type="submit"><br>
</form>
rejestracja.html

Formularz składa się z pól: login, E-mail, hasło i powtórz hasło. Dane z tego formularza będziemy przekazywać do pliku rejestruj.php. Skrypt rejestracji nie tylko będzie dodawał odebrane dane do bazy, ale też sprawdzi, czy login nie jest już zajęty, czy zawiera odpowiednie znaki, a także, czy podane hasła się zgadzaja i nie było pomyłki. Ponadto sprawdzimy, czy konstrukcja adresu E-mail jest poprawna i czy także nie jest już taki w bazie. Poniżej przedstawiam skrypt, postaram się wszystko omówić:
<?
//funkcja dodajaca dane do bazy:
	    function rejestruj($nick, $haslo, $email){
	    $sql = mysql_query("insert into `uzytkownicy` (`id`, `nick`, `haslo`, `email`) values ('', '$nick', '$haslo', '$email')"); 	
		return true;
		} 
//funkcja sprawdzajaca poprawnosc adresu email:
	function poprawny_email($email){
	if(!eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,4})$", $email)){
	return false;
	} else {
	return true;
	}
	}
	
//funkcja sprawdzajaca, czy login zawiera dozwolone znaki
	function poprawny_login($login){
	if (!ereg("^[a-zA-Z0-9]+$",$login)){
	return false;
	} else {
		return true;
    }
	}

//funkcja sprawdza, czy login nie jest juz zajety	
	function login_wolny($login){
	$sql = mysql_query("select * from `uzytkownicy` where `nick` = '$login'");	
	$liczba = @mysql_num_rows($sql);
	if($liczba > 0){
		return false;
	} else {
		return true;
	}	
	}

//funkcja sprawdza, czy email nie jest juz zajety		
	function email_wolny($email){
	$sql = mysql_query("select * from `uzytkownicy` where `email` = '$email'");	
	$liczba = @mysql_num_rows($sql);
	if($liczba > 0){
		return false;
	} else {
		return true;
	}	
	}
//funkcja sprawdzajaca zgodnosc obu hasel oraz czy zostaly podane:	
	function porownaj_hasla($haslo1, $haslo2){
	if($haslo1 == $haslo2 && $haslo1 !== '' && $haslo2 !== '' && $haslo1 !== null && $haslo2 !== null){	
	return true;	
	} else {
		return false;
	}
    }		
		
		
//odpowiednio przefiltrowane dane z formularza		
 $login = strip_tags($_POST['login']); 
 $email = strip_tags($_POST['email']);
 $haslo = strip_tags($_POST['haslo']);
 $haslo2 = strip_tags($_POST['haslo2']);
 
 
//uzywamy funkcji sprawdzajacych:

if(poprawny_email($email) && poprawny_login($login) && porownaj_hasla($haslo, $haslo2)){
	if(login_wolny($login) && email_wolny($email)){
	
	//rejestrujemy nowego uzytkownika
		          rejestruj($login, md5($haslo), $email);
           echo 'Zarejstrowano nowego użytkownika '.$login.'. Witamy!';
  } 
  else 
  //w przeciwnym razie wyswietlamy komunikaty o bledach:
  { 
  echo 'Login lub E-mail jest już w bazie';
   }

 } else {
 echo 'Podaj poprawne dane';
 }

?>
rejestruj.php

I teraz od początku. Funkcja rejestruj dodaje nowego użytkownika do bazy, nie trzeba chyba nic tłumaczyć, ale zanim doda, wszystkie dane muszą być sprawdzone. Funkcja sprawdz_email sprawdza, czy konstrukcja adresu email jest poprawna, czyli uzytkownik@adres.poczty. Funkcja poprawny_login sprawdza, czy podany login zawiera w sobie wyłącznie litery i cyfry. Dwie ostatnie funkcje wykorzystują wyrażenia regularne. Następna funkcja to login_wolny, która sprawdza, czy login nie jest zajęty. Szuka w bazie danych podanego loginu, jeżeli nie znajdzie, to znaczy że login jest wolny i można do dodać, tak samo jest z funkcją email_wolny. Ostatnia funkcja porownaj_hasla sprawdza, czy podane hasła są takie same, jeżeli wszystko się zgadza, można rejestrować użytkownika, jeżeli wszystkie funkcje zwrócą true. W przeciwnym wypadku skrypt wyświetli odpowiednie komunikaty i napotkanych błędach. To wszystko, jeżeli chodzi o skrypt rejestracji ;)

Następną częścią naszego systemu jest logowanie. Skrypt tworzy sesję, dzięki której możemy się dostać do treści dostępnych wyłącznie dla zalogowanych użytkowników. Poniżej zamieszczam formularz i skrypt:
<form method="post" action="loguj.php">Login:<br>
  			<input name="login" type="text" /><br>
			Hasło:<br>
 			<input name="haslo" type="password" /><br>
 			<input  name="loguj" value="Zaloguj" type="submit" />
</form>
logowanie.html

<?
	function loguj($login, $haslo){
	if(!session_is_registered("uzytkownik")){
	$zap1=mysql_query("select * from `uzytkownicy`  WHERE `nick` = '$login' and `haslo` = '$haslo' ");	
	if(mysql_num_rows($zap1) > 0){
	session_register("uzytkownik");
	$_SESSION['login'] = $login;	
	$_SESSION['ip'] = $_SERVER['REMOTE_ADDR'];

	} else { 
		return false; 
		}
	} else { 
		return false; 
		}	
	}

if(strip_tags($_POST['loguj']) == 'Zaloguj'){
$login = strip_tags($_POST['login']);
$haslo = strip_tags(md5($_POST['haslo']));


if(!loguj($login, $haslo)){
$blad_login = 'Zły login lub hasło<br>';	
echo $blad_login;
} 

}
?>
loguj.php

Na samym początku zadeklarowaliśmy funkcję loguj. Sprawdza ona, czy login i hasło są poprawne, czyli szuka w bazie rekordu o takim haśle i loginie. Jeżeli znajdzie, to znaczy że dane są poprawne i można rozpoczynać sesję, w innym wypadku wyświetli błąd. Sesję nazwaliśmy "uzytkownik". W ciasteczkach zapisujemy także IP, które potem użyjemy do zabezpieczenia sesji przed kradziejem :D
No i system rejestracji i logowania jest już gotowy. Teraz musimy napisać dwie funkcje, które będa wyświetlać treści dla użytkowników zalogowanych i niezalogowanych:
    function zalogowany($tekst){
    if(session_is_registered("uzytkownik")){
    echo "$tekst";
    }
    }
    
        function niezalogowany($tekst){
    if(!session_is_registered("uzytkownik")){
    echo "$tekst";
    }
    }


Myślę, że nie trzeba tu zbyt dużo tłumaczyć, znak "!" to znak negacji, czyli jeżeli warunek nie jest spełniony. Jeszcze tylko zabezpieczamy sesję przed kradzieżą (skrypt umieszczamy na samym początku strony):
if(session_is_registered("uzytkownik")){
if($_SESSION['ip'] !== $_SERVER['remote_addr']){
die('Zabezpieczenie zostalo aktywowane!');
}
}

Powyższy kod sprawdza, czy IP komputera jest takie samo, jak IP, na którym się zalogowano, czyli inaczej mówiąc sprawdza, czy nikt nie przeniósł naszej sesji na swój komputer.

Dodatkowy możemy stworzyć plik (a raczej musimy), który niszczy sesję, czyli wylogowuje użytkownika. Wystarczy zapisać plik wyloguj.php a w treści:
<?
session_destroy();
echo 'Wylogowano.';
?>
wyloguj.php
Cały system jest już gotowy, poniżej jeszcze zamieszczam przykładowy dokument, który korzysta z systemu:
if(session_is_registered("uzytkownik")){
if($_SESSION['ip'] !== $_SERVER['remote_addr']){
die('Zabezpieczenie zostalo aktywowane!');
}
}


    function zalogowany($tekst){
    if(session_is_registered("uzytkownik")){
    echo "$tekst";
    }
    }
    
        function niezalogowany($tekst){
    if(!session_is_registered("uzytkownik")){
    echo "$tekst";
    }
    }


niezalogowany('
<form method="post" action="loguj.php">Login:<br>
  			<input name="login" type="text" /><br>
			Hasło:<br>
 			<input name="haslo" type="password" /><br>
 			<input  name="loguj" value="Zaloguj" type="submit" />
</form><br/>lub <a href="rejestracja.html.php">Zarejestruj się</a>');

zalogowany('Witaj '.$_SESSION['login'].'!<br/><a href="wyloguj.php">Wyloguj się</a>');




Skrypt SQL tworzący tabelę:
create table `uzytkownicy`(
`id` int(11) not null auto_increment,
`nick` varchar(255) not null,
`haslo` varchar(255) not null,
`email` varchar(255) not null,
primary key(`id`)
)

luki, [22.12.2009 12:51] Czytań: 2197


dodaj do flakera

Zaloguj się, aby komentować artykuły.
GORO1995 [22.11.2009 2:04]
wszystko pięknie ale mam pytanie gdzie jest cześć łącząca z bazą danych ? bo jak system ma tą bazę wykorzystać jak nie wie ze ona istnieje
luki [22.11.2009 13:16]
masz rację, napisałem już do tego osobny artykuł: http://wortal.freelancemedia.pl/artykul-19-jak_polaczyc_sie_z_baza_mysql_w_php_.html
scigany2 [24.11.2009 13:54]
Od razu pisze ze jestem zielony:( Gdzie mam wkleić te dwie funkcje na userow zalogowanych i niezalogowanych? Gdzie wstawic zabezpieczenie przed kradzieża?- na stronie logowania? czy na stronie głównej?
luki [24.11.2009 14:01]
zabezpieczenie sesji wklejasz na samym poczatku kodu, najlepiej na wszystkich podstronach, potem wklejasz wszystkie funkcje (zalogowany, niezalogowany) bo z nich korzysta dalej nasza aplikacja. Uzycie funkcji dla zalogowanych i niezalogowanych wklejasz tam, gdzie Ty potrzebujesz, tzn funkcja niezalogowany wyswietla informacje dla niezalogowanych, np. formularz do logowania/rejestracji w HTMLu, analogicznie dla zalogowanych. Wazne, aby na samym poczatku kodu byly zadeklarowane wszystkie funkcje. Uzywasz ich: zalogowany("tekst dla zalogowanych");
rafciorb [28.11.2009 8:55]
cześć robieniem stron zajmuję się rok mógłbyś mi powiedzieć jak nazwać tą ostatnią tabelkę i jak nazwać tą tabelkę z http://wortal.freelancemedia.pl/artykul-19-jak_polaczyc_sie_z_baza_mysql_w_php_.html
luki [28.11.2009 13:01]
Na samym końcu tego artykułu podałem skrypt SQL, który tworzy tabelę o nazwie 'uzytkownicy' i tylko ta tabela jest używana w systemie, myślę, że chodzi Ci też o nazwę bazy danych. To zależy, gdzie masz stronę, jeżeli na localhoscie, to bazę nazywasz jak chcesz, jeżeli używasz darmowego hostingu, to baza zwykle jest już jakoś nazwana (np. db342380), w hostingu płatnym też jest z tym różnie, musisz pogrzebać w panelu administracyjnym konta hostingu. Skrypt SQL uruchamiasz z poziomu PHPMyAdmina. Pozdrawiam.
kisiell9 [05.05.2010 13:24]
Ja mam takie głupie pytanie^^ nie wiem jak założyć tabelę w bazie danych ... jezeli ktos mógł by mi w tym pomóc to prosze :)
kisiell9 [05.05.2010 15:09]
ja mam bład łaczenia ... http://urzydkownik1.za.pl/rejstruj.php
luki [11.05.2010 17:36]
kisiell9 - prawdopodobnie podałeś złe parametry połączenia, tabelę zakładasz używając 'create table' w PHPMyAdminie, jeśli go nie posiadasz, to go pobierz i zainstaluj na serwerze.
levy [17.05.2010 21:24]
wszystko ładnie pięknie, ale loguj.php i logowanie.html a chiny ludowe nie chcą ruszyć.. wciąż wyrzuca mi 'Zły login lub hasło'. Jakies pomysly? prosze o kontakt na numer gg: 2457145
luki [17.05.2010 22:25]
powodów może być wiele, choćby brak użytkowników w bazie
effaron [19.05.2010 11:32]
Witam. Luki świetna robota, lecz mam ten sam problem co kolega wyżej, levy. Skrypt ten chce wykorzystać na swojej stronie na zaliczenie przedmiotu a wiec bardzo mi zależy. z góry dzięki. Pozdrawiam
luki [19.05.2010 14:07]
W artykule wkradł się błąd, proszę spojrzeć na kod pliku loguj.php, funkcja loguj była używana 2 razy, więc za drugim razem zwracała false, ponieważ sesja była już zadeklarowana za pierwszym razem. Przepraszam za błędy, ale przy tak sporym kodzie jest to możliwe.
levy [20.05.2010 18:10]
niestety kod nadal [b]nie[/b] działa... W każdym wypadku wpisywania jakiegokolwiek hasła/usera wyświetla się to samo: [i]Zły login lub hasło[/]
luki [20.05.2010 19:35]
sprawdziłem kod jeszcze raz u siebie, wszystko ładnie działa... gdzieś popełniłeś błąd
tripix [23.05.2010 13:21]
Mi to nie działa ... tzn .. przy logowaniu pisz " Złe hasło lub login " .. i nie loguje xP.

Polecamy


Szukaj
Partnerzy
Katalog stron
Katalog stron Gwiazdor
Darmowe Pozycjonowanie
Hosting boo.pl
HTML CSS JavaScript FLASH PHP MySQL
katalog stron


Wymiana linków
Katalog stron
Link24
Linkman
Katalog Stron
Otwarty Katalog Stron SEO FRIENDLY - mocne linki pozycjonujące
katalog stron Googi.pl

Notebooki - Korty tenisowe - barierki - Łazienki - Nocleg Kraków - Mieszkania Gdańsk - Perfumy Max Mara - avent - Matematyka - Perfumy - Wanny

Nowe Forum Młodzieżowe | taxi władysławowo | kuchnie | Biuro matrymonialne Agentur-2life | wynajem namiotów | Giżycko | maine coonMaterac | Agencja Hostess | opata | Hale Namiotowe | Tworzenie Stron