Odpowiedz 
 
Ocena wątku:
  • 3 Głosów - 5 Średnio
  • 1
  • 2
  • 3
  • 4
  • 5
[php] System logowania
Autor Wiadomość
Styku Offline
Member
***

Liczba postów: 67
Dołączył: 19-12-2007
Reputacja: 2
Post: #1
[php] System logowania
Szybki tutorial tłumaczący budowę prostego systemu logowania.

config.php
Jest to plik, w którym zapiszemy sobie konfiguracje bazy MySQL tak, byśmy mieli do niej łatwy i szybki dostęp.
Kod PHP:
<?php
//1
$db_user "użytkownik";
$db_server "serwer";
$db_pass "hasło";
$db_name "nazwa bazy danych";
?>

1. Zmiennym przypisujemy dane wymagane do połączenia się z bazą danych MySQL. Kolejno są to: nazwa użytkownika, adres serwera, hasło oraz nazwa bazy danych.



sessions.php
Tutaj trzymać będziemy funkcje obsługujące logowanie i wylogowywanie.
Kod PHP:
<?php

//2
session_start();

//3
function auth()
{
    return 
$_SESSION["USER_AUTH"];
}

//4
function login$login )
{
    
$_SESSION["USER_AUTH"]=TRUE;
    
$_SESSION["USER_ID"]=$login;    
}

//5
function logout()
{
    
$_SESSION["USER_AUTH"]=FALSE;
    
$_SESSION["USER_ID"]="";    
}

//6
if( $_GET['action']=="logout" ){ logout(); }

?>

2. Rozpoczynamy sesje. Ważnym jest, by ta funkcja znalazła się zawsze na początku, gdyż wysyła ona do przeglądarki odpowiednie nagłówki, i poprzedzona przez cokolwiek innego - nie zadziała.
3. Zwraca wartość zmiennej $_SESSION["USER_AUTH"].
4. Nadaje zmiennym odpowiednie wartości (dzięki nim, użytkownik będzie traktowany jako zalogowany).
5. Przywraca zmiennym wartości domyślne, by użytkownik był traktowany jako wylogowany.
6. Po wklepaniu w przeglądarkę adresu naszastrona.pl/index.php?action=logout (albo po kliknięciu na taki link), zostaniemy wylogowani.


login.php
Tutaj znajduje się formularz logowania i funkcja, która go obsługuje
Kod PHP:
<?php
//7
echo"
<form action=\"index.php?action=login\" method=post>
<input class=login type=text name=login></input>
<input class=login type=password name=pass></input>
<input class=submit type=submit value=OK></input>
</form>
"
;

//8
if( $_GET['action']=="login" )
{

//9
$login $_POST['login'];
$pass md5($_POST['pass']);

//10
$db mysql_connect$db_server$db_user$db_pass );
mysql_select_db$db_name );
$query "SELECT `password` FROM `users` WHERE `login`='$login'";
$query mysql_query$query );
$haslo mysql_fetch_row$query );

//11
if( $haslo[0]==$pass )

    
login$login ); 
    echo
"<META HTTP-EQUIV=Refresh CONTENT=\"0; URL=index.php\">"
}
else{ echo
"Zły login lub hasło!"; }

mysql_close$db );
}
?>

7. Wyświetlenie odpowiedniego formularza. Można sobie go odpowiednio podrasować css'em, żeby był ładny Wink
8. Sprawdza, czy zostało zarządane logowanie (np. po kliknięciu w link naszastrona.pl/index.php?action=login)
9. Pobranie zmiennych z formularza, zakodowanie hasła, by później mogło zostać porównane z tym z bązą danych.
10. Połączenie z bazą danych, wybranie odpowiedniej bazy, wysłanie zapytania o hasło do konkretnego loginu.
11. Porównanie wpisanego hasła, z hasłem z bazy danych. Jeżeli poprawne, następuje zalogowanie i przekierowanie, jezeli błędne, wyświetla komunikat o niepoprawności hasła.


index.php
Zbieramy wszystko do kupy Smile
Kod PHP:
<?php 
//12
include("config.php");
include(
"sessions.php");

//13
if($_SESSION["USER_AUTH"]==TRUE){ include("panel.php"); }
else{ include(
"login.php"); }
?>

12. Załączenie potrzebnych plików, czyli danych potrzebnych do logowania oraz funkcji obsługi sesji.
13. Sprawdzenie, czy użytkownik jest zalogowany. Jeżeli tak, wyświetlamy treść dostępną tylko dla zalogowanych, jeżeli nie, wyświetlamy formularz logowania.


Teraz pozostaje nam tylko stworzyć odpowiednią baze danych i tabele, oraz pierwszego użytkownika. Jeżeli nie potrafisz tego zrobić ręcznie, możesz skorzystać z tego skryptu (zapisać na serwerze i po prostu uruchomić w przeglądarce):
install.php
Kod PHP:
<?php
include("config.php");

echo
"Łączenie z bazą danych... ";

if ( 
$db mysql_connect$db_server$db_user$db_pass ) ){ echo "<b>OK</b><BR>"; }
else{ echo
"<strike>BŁĄD</strike><BR>"; }

echo
"Wybieranie bazy danych... ";

if ( 
$log mysql_select_db$db_name ) ){ echo "<b>OK</b><BR>"; }
else{ echo
"<strike>BŁĄD</strike><BR>"; }

echo
"Tworzenie tabel... ";

$query "CREATE TABLE users (id integer NOT NULL AUTO_INCREMENT, login char(16), password char(32), PRIMARY KEY(id))";

if ( 
$log mysql_query($query) ){ echo "<b>OK</b><br>"; }
else{ echo
"<strike>BŁĄD</strike><BR>"; }


echo
"Dodawanie potrzebnych wpisów... ";

$haslo md5("TUTAJ_NASZE_HASŁO");
$login "TUTAJ_NASZ_LOGIN";

$query "INSERT INTO `users` (`id`, `login`, `password`) VALUES ('', '$login', '$haslo') ";

if ( 
$log mysql_query($query) ){ echo "<b>OK</b><br>Instalacja zakończona pomyślnie!"; }
else{ echo
"<strike>BŁĄD</strike><BR>"; }

mysql_close($db);

?>

register.php
Rejestracja nowych użytkowników
Kod PHP:
<?php

//14
echo"
<form action=\"index.php?action=register\" method=post>
<input class=login type=text name=login></input>
<input class=login type=password name=pass></input>
<input class=submit type=submit value=Rejestruj></input>
</form>
"
;

//15
if( $_GET['action']=="register" && isset($_POST['login']) && isset($_POST['pass']) ) 
{

//16
$login $_POST['login'];
$pass md5($_POST['pass']);

//17
$db mysql_connect$db_server$db_user$db_pass );
mysql_select_db$db_name );
$query "SELECT `password` FROM `users` WHERE `login`='$login'";
$query mysql_query$query );
$haslo mysql_fetch_row$query );

//18
if( isset($haslo[0]) ) { echo"Taki użytkownik już istnieje!"; }
else


//19
    
$query "INSERT INTO `users` (`id`, `login`, `password`) VALUES ('', '$login', '$pass') ";
    if( 
$log mysql_query($query) ){ echo "<b>OK</b><br>Zostałeś zarejestrowany!"; }
    else{ echo
"Coś poszło nie tak.<BR>"; } 
}

mysql_close$db );
}

?>

14. Wyświetlamy taki sam formularz jak przy logowaniu.
15.Analogicznie jak w pliku login.php, sprawdzamy, czo została zarządana rejestracja (np. po kliknięciu w link naszastrona.pl/index.php?action=register). Tutaj dodajemy jeszcze dwa warunki - pola login i pass nie mogą być puste.
16. Pobranie zmiennych z formularza, zakodowanie hasła, by później mogło zostać wysłane do bazy w odpowiedniej, bezpiecznej formie.
17. Połączenie z bazą danych, wybranie odpowiedniej bazy, wysłanie zapytania o hasło do konkretnego loginu w celu sprawdzenia czy taki login w ogóle istnieje (oczywiście, powinno się to zrobić w inny sposób, ale z lenistwa po prostu skopiowałem kod z pliku login.php Wink).
18. Sprawdzamy, czy nie ma już użytkownika o takim samym loginie.
19. Jeśli wszystko jest ok, dodajemy odpowiedni rekord do bazy. Użytkownik już istnieje.

kick.php
Proste zabezpieczenie przed nieautoryzowanym, bezpośrednim dostępem do plików chronionych.
Kod PHP:
<?php 

//20
if(!$_SESSION["USER_AUTH"]==TRUE)

    echo 
"Nie masz prawa tego ogladac.";
//21
    
exit();
}

?>

20. Sprawdzamy, czy user jest zalogowany.
21. Jeżeli nie - cały dalszy kod przestanie być wykonywany.

Jak zadziała to w praktyce?

panel.php
Sprawdzamy, czy wszystko chodzi tak, jak powinno.
Kod PHP:
//22
<?php include("kick.php"); ?>

//23
<a href="index.php?action=logout">Wyloguj</a> 

22. Tu warto byłoby napisać nieco więcej o funkcji include. Mówi się, że ona "dołącza" jakiś plik do kodu. No, w zasadzie tak. Chociaż bardziej trafnym określeniem byłoby "wkleja". dzięki takiemu zabiegowi, kod pliku panel.php rozpocznie się od sprawdzenia, czy użytkownik jest zalogowany. Jeżeli test się nie powiedzie, wyświetli się krótki komunikat, a wykonywanie całej strony dla bezpieczeństwa zostanie przerwane. Od teraz, dzięki krótkiej linijce
Kod PHP:
<?php include("kick.php"); ?>
jesteśmy w stanie zabezpieczyć dowolny plik przed nieautoryzowanym dostępem - wystarczy, że wstawimy ją na jego początku.
23. A tu coś, co wyświetli się, gdy okaże się, że plik uruchomiony jest przez zalogowanego użytkownika, i to nie bezpośrednio, a przez index.php. Wyświetli się link, po kliknięciu w który zostaniemy wylogowani.

index.php
Na koniec zmodyfikujmy jeszcze index.php by wyglądał tak:
Kod PHP:
<?php 
include("config.php");
include(
"sessions.php");

if(
$_SESSION["USER_AUTH"]==TRUE){ include("panel.php"); }
else

include(
"login.php"); 
include(
"register.php");
}
?>

Po takim zabiegu, panel rejestracji zostanie wyświetlony pod panelem służącym do logowania. Cały system jest gotowy.


Chcąc wzbogacić plik index.php o jakiekolwiek inne elementy, musimy pamiętać tylko o tym, by na samym początku include'ować pliki sessions.php i config.php. Przykładowo, może to wyglądać tak:

Kod PHP:
<?php 
include("config.php");
include(
"sessions.php"); 
?>

<html>
<head>
</head>
<body>
<h3>Logowanie</h3>


<?php
if($_SESSION["USER_AUTH"]==TRUE){ include("panel.php"); }
else

include(
"login.php"); 
include(
"register.php");
}
?>

</body>
</html> 

http://styku.netiz.pl/wp
(Ten post był ostatnio modyfikowany: 06-01-2008 14:34 przez Styku.)
20-12-2007 22:09
Odwiedź stronę użytkownika Znajdź wszystkie posty użytkownika Odpowiedz cytując ten post
Marcin Offline
Administrator
*******

Liczba postów: 814
Dołączył: 17-12-2007
Reputacja: 12
Post: #2
RE: [php] System logowania
Dobra robota, z pewnością przyda się nie jednemu użytkownikowi. Oby tak dalej Wink.

Zapraszam na NBA Forum oraz PS2 Forum.
20-12-2007 23:16
Odwiedź stronę użytkownika Znajdź wszystkie posty użytkownika Odpowiedz cytując ten post
Lionel Offline
Member
***

Liczba postów: 131
Dołączył: 18-12-2007
Reputacja: 1
Post: #3
RE: [php] System logowania
Super tut na pewno nie jednemu się przyda, jak jeszcze sam napisałeś to pełen podziw Wink

Lionel Site:
Strona o grze gothic
Free download do Sony Ericssona oraz forum
Wiedźmin - strona oraz forum
20-12-2007 23:33
Odwiedź stronę użytkownika Znajdź wszystkie posty użytkownika Odpowiedz cytując ten post
Poju Offline
Senior Member
****

Liczba postów: 283
Dołączył: 25-12-2007
Reputacja: 4
Post: #4
RE: [php] System logowania
Byłbym bardzo wdzięczny, jeśli wrzuciłbyś jeszcze skrypt rejestracji. Przydałby mi się.

- - - - - -

Jak zabezpieczyć plik panel.php, aby dostęp do niego mieli tylko zarejestrowani użytkownicy?

| Forum wieluńskich licealistów | Forum Komputerowe | |
05-01-2008 03:34
Znajdź wszystkie posty użytkownika Odpowiedz cytując ten post
Styku Offline
Member
***

Liczba postów: 67
Dołączył: 19-12-2007
Reputacja: 2
Post: #5
RE: [php] System logowania
Oh, no tak. Nie napisałem tego, bo to wersja schematyczna i bardzo uproszczona. Ale robi to się analogicznie, czyli na przykład wstawiamy tam instrukcję if w takiej postaci jak w pliku index.php:

Kod PHP:
if($_SESSION["USER_AUTH"]==TRUE)
{
 
Właściwa treść panelu
}
else
{
 
A tu komunikat o potrzebie zalogowania się.


Można też na początku każdej chronionej strony dołączać skrypt który przerywa wykonywanie kodu, jeżeli wykryje, że użytkownik jest wylogowany. Takie coś byłoby przydatne w przypadku posiadania wielu stron z dostępem tylko dla zalogowanych. Generalnie można różnie kombinować, podałem ten najprostszy sposób.

A skrypt rejestracji postaram się dopisać jutro. Mógłbym to zrobić na czuja, ale pewno pojawiłyby się jakieś drobne błędy, wolę to sprawdzić i wkleić poprawne, żeby można było sobie odrazu skopiować na stronę.

http://styku.netiz.pl/wp
(Ten post był ostatnio modyfikowany: 05-01-2008 03:50 przez Styku.)
05-01-2008 03:41
Odwiedź stronę użytkownika Znajdź wszystkie posty użytkownika Odpowiedz cytując ten post
Styku Offline
Member
***

Liczba postów: 67
Dołączył: 19-12-2007
Reputacja: 2
Post: #6
RE: [php] System logowania
Przepraszam za double posta, zgłaszam tylko, że tut został zaktualizowany Smile
Rozrósł się trochę, muszę przyznać. Dodałem obiecaną rejestrację i zabezpieczanie plików przed bezpośrednim dostępem.
Miłej zabawy.

http://styku.netiz.pl/wp
05-01-2008 17:22
Odwiedź stronę użytkownika Znajdź wszystkie posty użytkownika Odpowiedz cytując ten post
Poju Offline
Senior Member
****

Liczba postów: 283
Dołączył: 25-12-2007
Reputacja: 4
Post: #7
RE: [php] System logowania
Mi się pojawia:
Kod:
Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at /home/freehost/x/x/xxxb/www/index.php:10) in /home/freehost/x/x/xxxb/www/sessions.php on line 4

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /home/freehost/x/x/xxxb/www/index.php:10) in /home/freehost/x/x/xxxb/www/sessions.php on line 4

| Forum wieluńskich licealistów | Forum Komputerowe | |
05-01-2008 21:35
Znajdź wszystkie posty użytkownika Odpowiedz cytując ten post
Styku Offline
Member
***

Liczba postów: 67
Dołączył: 19-12-2007
Reputacja: 2
Post: #8
RE: [php] System logowania
Wygląda to tak, jakbyś dwukrotnie include'ował plik sessions.php

Upewnij się, że plik index.php wygląda dokładnie tak.
Kod PHP:
<?php 
include("config.php");
include(
"sessions.php");

if(
$_SESSION["USER_AUTH"]==TRUE){ include("panel.php"); }
else

include(
"login.php"); 
include(
"register.php");
}
?>

http://styku.netiz.pl/wp
05-01-2008 21:38
Odwiedź stronę użytkownika Znajdź wszystkie posty użytkownika Odpowiedz cytując ten post
Poju Offline
Senior Member
****

Liczba postów: 283
Dołączył: 25-12-2007
Reputacja: 4
Post: #9
RE: [php] System logowania
Jakbyś mógłbyś zobaczyć nie działa mi rejestracja:
http://xxxb.lua.pl/

Poprzednim razem dodałem trochę htmla, i dlatego nie działało.

| Forum wieluńskich licealistów | Forum Komputerowe | |
06-01-2008 06:48
Znajdź wszystkie posty użytkownika Odpowiedz cytując ten post
Styku Offline
Member
***

Liczba postów: 67
Dołączył: 19-12-2007
Reputacja: 2
Post: #10
RE: [php] System logowania
Ech, mój błąd, i to jaki idiotyczny. Sprawdzenie warunku w register.php powinno wyglądać tak:
Kod PHP:
if( $_GET['action']=="register" && isset($_POST['login']) && isset($_POST['pass']) ) 
czyli przy zmiennej z hasłem i loginem zamieniasz GET na POST i będzie działać.

A co do htmla, możesz go dodawać, tylko musisz pamiętać żeby includować sessions.php i config.php na początku. Np. tak:
Kod PHP:
<?php 
include("config.php");
include(
"sessions.php"); 
?>

<html>
<head>
</head>
<body>

<?php
if($_SESSION["USER_AUTH"]==TRUE){ include("panel.php"); }
else

include(
"login.php"); 
include(
"register.php");
}
?>

</body>
</html> 
I wtedy wszystko zadziała. Wynika to z tego, że funkcja session_start() wysyła do przeglądarki nagłówki, co musi być zrobione na samym początku, zanim cokolwiek innego zostanie przesłane.

http://styku.netiz.pl/wp
(Ten post był ostatnio modyfikowany: 06-01-2008 14:33 przez Styku.)
06-01-2008 14:28
Odwiedź stronę użytkownika Znajdź wszystkie posty użytkownika Odpowiedz cytując ten post
Odpowiedz 


Podobne wątki
Wątek: Autor Odpowiedzi: Wyświetleń: Ostatni post
  Prosty system podstron luc3k 7 1,369 18-07-2010 01:38
Ostatni post: kancik
  [php] System Newsów kucici 1 2,069 20-12-2007 20:47
Ostatni post: Styku

Skocz do:
Polecamy
SEO Hosting SEO Hosting Tworzenie sklepów
Sponsorzy forum


Opieka i sponsoring: Internet Wizard - profesjonalne projektowanie stron www
SEOLINE.PL to tani hosting pod każde zastosowanie. Hosting SEO najlepszy pod zaplecze!
Przyjaciele forum
Targi - Apartament Kołobrzeg - Koder xHTML/CSS - Darmowe Szablony Stron