Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [php] System logowania i sesje
-gosc_mufan-
post 21.07.2006, 11:00:34
Post #1





Goście







Witam mam problem.Dopiero zaczynam zabawe z php a juz musze napisac system logowania oparty mysql. Czy moglby mi ktos pomoc dokladnie chodzi o to z na stronce sa miejsca na login i haslo i po kliknieciu na loguj powino sprawdzac czy taki user jest w bazie danych. Dziekuje za szybka odpowiedz:)

----------------------
Pozwoliłem sobie zmienić nazwę
wątku : )
---
~strife
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
strife
post 21.07.2006, 16:04:48
Post #2





Grupa: Przyjaciele php.pl
Postów: 2 605
Pomógł: 96
Dołączył: 22.10.2004
Skąd: UK

Ostrzeżenie: (0%)
-----


Witam,

Napiszę Ci dość szybko czym jest logowanie w php i jak przebiega, ponieważ temat logowania był wałkowany i jest bardzo długo, więc sam rozumiesz, że pisać n'ty raz to samo robi się z oporem ( przynajmniej mi ). No ale przejdźmy do rzeczy, zakładam, że pewne podstawy z php znasz takie jak tworzenie warunków, pętli, zmiennych. Jeżeli już masz ten zasób wiedzy, to przejdźmy do napisania samego skryptu logowania.

Na początku tworzymy plik o dowolnej nazwie, u mnie będzie się nazywał login.php, ten plik umożliwi stworzenie tzw. zmiennej sesyjnej odpowiadającej za zalogowanie się na stronę. O zmiennach sesyjnych możesz poczytać w manualu w dziale zmienne predefiniowane. Oczywiście, samo tworzenie zmiennej sesyjnej nie wystarczy, jest potrzebny też formularz, który umożliwi nam dowolne logowanie.

Przykładowy formularz może wyglądać w ten sposób:

  1. <form method="post" action="login.php">
  2. <input type="text" name="login" />
  3. <input type="password" name="password" />
  4. <input type="submit" value="zaloguj sie" />
  5. </form>

Oczywiście ten formularz umieszczamy w naszym pliku, bądź innym wzkazującym na login.php ( action ). Gdy już mamy w takiej postaci nasz plik, przystępujemy do obrobienia go. Tak więc tworzymy warunek, który nam sprawdzi czy dane przesłane w formularzu są prawidłowe.

  1. <?php
  2. // powyzej badz ponizej przed tym kodem moze byc umieszczony formularz ;)
  3. // najpierw sprawdzamy, czy wysyłane zmienne w formularzu nie są puste.
  4. if ( ! empty( $_POST['login'] ) && ! empty( $_POST['password'] ) )
  5. {
  6. // jezeli nie dokonujemy sprawdzenia poprawnosci loginu i hasla
  7. if ( $_POST['login'] == 'strife' && $_POST['password'] == 'admin' )
  8. {
  9. // tworzymy zmienna sesyjna
  10. $_SESSION['auth'] = '1';
  11. }
  12. else
  13. {
  14. echo 'Podales zly login badz haslo!';
  15. }
  16. }
  17. else
  18. {
  19. echo 'Wprowadz dane do formularza :)';
  20. }
  21. ?>

Przy tak skonstruowanym kodzie, i poprawnym wpisaniu danych zostanie dodane zmienna sesyjna o nazwie 'auth'. Zmienne sesyjne są widoczne w każdym miejscu ponieważ ich zasięg jest globalny i tutaj też zapraszam do zapoznania się z manual'em i rozdziałem o zmiennych predefiniowanych.

Następnie posiadając taką zmienną możemy w każdym miejscu sprawdzić, czy użytkownik jest zalogowany, czyli sprawdzamy czy ta zmienna istnieje.

  1. <?php
  2. if ( isset( $_SESSION['auth'] ) )
  3. {
  4. echo 'Wiadomosc dla zalogowanego uzytkownika';
  5. }
  6. ?>

Wszystko wydaje, się proste, ale kod który napisałem, może nie działać.. Dlaczego? W kodzie, który zaprezentowałem nie ma nigdzie zdefiniowanego startu sesji, więc tworzenie zmiennych sesyjnych i ich sprawdzanie nie ma najmniejszego sensu. Na początku kodu musi być:

  1. <?php
  2. ?>

Wtedy, możemy dowolnie operować na sesjach. Wszystko pięknie, ale czegoś tu brakuje... a co jeśli będziemy chcieli się wylogować, tutaj z pomocą przychodzi session_destroy" title="Zobacz w manualu PHP" target="_manual, bądź unset" title="Zobacz w manualu PHP" target="_manual, z tą różnicą, że to pierwsze usunie wszystkie zmienne sesyjne, a drugie tylko wybraną:

  1. <?php
  2. unset( $_SESSION['auth'] );
  3. ?>

To by było Tyle, jeżeli chodzi o samo logowanie, teraz trochę o mysql. Posłużę się do tego kodem, który już wcześniej napisałem na tym forum:

  1. <?php
  2. $query = mysql_query("SELECT * FROM uzytkownicy WHERE `user` = '" . $_POST['user'] . "' ");
  3. $fetch = mysql_fetch_array($query);
  4. if ( $fetch ) // jesli user zostanie znaleziony w bazie
  5. {
  6. if ( md5( $_POST['pass'] ) == $fetch['haslo'] ) // jesli haslo sie zgadza
  7. {
  8.  echo 'logowanie zakonczone sukcesem';
  9. }
  10. else
  11. {
  12.  echo 'Przykro mi, ale podane haslo jest bledne';
  13.  }
  14. }
  15. else
  16. {
  17.  echo 'Podany uzytkownik nie istnieje w bazie danych';
  18. }
  19.  
  20. ?>

Oczywiście do takiego kodu można się przyczepić o kwestię bezpieczeństwa ( sql injection ), ale żeby nie przyciemniać tego przykładu odwołuję Cię do przyczepionego tematu sql injection na forum -> php. A więc przeanalizujmy powyższy kod, użytkownik wpisuje swój login i hasło, następnie wykonujemy zapytanie, które sprawdza czy dany użytkownik istnieje, jeżeli tak sprawdzamy hasło, i miejscu gdzie pojawia się informacja o poprawnym zalogwaniu, możemy dodać naszą zmienną sesyjną.

Mam nadzieję, że już mniej więcej wiesz o co chodzi z logowaniem. Kod pisałem z palca, więc mogą być małe błędy. W razie pytań czy wątpliwości, pisz na forum. smile.gif

Pozdrawiam!


--------------------
Go to the top of the page
+Quote Post

Posty w temacie
- gosc_mufan   [php] System logowania i sesje   21.07.2006, 11:00:34
- - Cysiaczek   Skoro musisz napisać, to znaczy, że to k...   21.07.2006, 11:08:04
- - adi2005   Jest masa ksiazek na ten temat. Mozna je już kupić...   21.07.2006, 11:31:34
- - scanner   @adi2005: jeszcze jedna taka odpowiedz i zaliczysz...   21.07.2006, 13:45:16
- - adi2005   @scanner: Oki sorki ale jednak chciałbym wied...   21.07.2006, 14:03:45
- - gosc_mufan   Tak probowalem sie bawic z gotowcami ale mi nie sz...   21.07.2006, 15:19:54
- - acztery   formularz wysyla dane login i password do naszego ...   21.07.2006, 15:41:03
- - strife   Witam, Napiszę Ci dość szybko czym jest logowanie...   21.07.2006, 16:04:48
- - robos85   Zrobiłem takie pliki: logowanie.html: [HTML] pobie...   20.03.2007, 21:41:27
- - kwiateusz   bezpośrednio do plik.php? to czego oczekujesz że z...   20.03.2007, 21:56:22
- - robos85   ok działa oto moje pliki: logowanie.html pomijam, ...   20.03.2007, 22:30:44
|- - shaolin33   Cytat(robos85 @ 20.03.2007, 22:30:44 ...   19.03.2013, 09:44:46
- - kwiateusz   np. zamiast [PHP] pobierz, plaintext <?phpprint...   20.03.2007, 22:39:22
- - robos85   kurde rzeczywiście ;p Ale to wynik tego że nie śpi...   20.03.2007, 22:44:49
- - kwiateusz   wystarczy manula przejrzeć... session_id" title="Z...   20.03.2007, 22:47:05
- - robos85   zrobiłem taki plik: wybór.html [HTML] pobier...   20.03.2007, 23:32:15
- - Cienki1980   Jeżeli chcesz korzystać z kodu PHP musisz umieszcz...   20.03.2007, 23:38:41
- - robos85   yhm ok będę to robił, bo myślałem że jakoś da radę...   20.03.2007, 23:43:37
- - kwiateusz   da o ile możesz używać plików htacc...   21.03.2007, 00:51:44
- - idas   Yo! Mam pytanie: przedstawione tutaj kody do l...   26.03.2007, 00:16:25
|- - strife   Cytat(idas @ 26.03.2007, 01:16:25 ) Y...   26.03.2007, 00:49:37
- - idas   Wlasnie sie przekonalem, ze zmienne sesyjne u mnie...   26.03.2007, 15:41:34
|- - strife   Cytat(idas @ 26.03.2007, 16:41:34 ) W...   26.03.2007, 18:14:10
- - idas   Yo! Jednak sesje dzialaja. Jednak mam pewne py...   26.03.2007, 20:05:51
- - strife   A jakich rezultatów się spodziewasz, musi działać....   26.03.2007, 21:04:46
- - idas   HeHe nie no o session_start(); to pamietalem;) Juz...   28.03.2007, 12:27:15
|- - strife   Cytat(idas @ 28.03.2007, 13:27:15 ) z...   28.03.2007, 16:14:17
- - idas   Dzieki, poczytam A mam jeszcze jedno pytanie: cz...   29.03.2007, 15:13:19
|- - strife   Cytat(idas @ 29.03.2007, 16:13:19 ) D...   29.03.2007, 16:18:40
- - idas   Dzieki Ja zrobilem u siebie logowanie tak: jesli...   29.03.2007, 22:33:48
- - super_e107   Sorki że odkopuje, ale nie ma sensu pisać nowego t...   31.12.2007, 14:48:00
- - Dex19   Witam, tym razem ja odkopię Jestem (php przedszko...   26.01.2011, 18:13:05
- - Noidea   Na większości (jak nie wszystkich) hostingach wspó...   26.01.2011, 18:25:26
- - Dex19   bardzo dziękuję za odpowiedź CytatOpcja trzecia j...   26.01.2011, 19:10:52


Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 29.03.2024 - 06:21