Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Logowanie na sesjach - przykład i pytania
Forum PHP.pl > Forum > Przedszkole
Raynold
Witam!

Ostatnimi czasy siedziałem troszkę nad php, czytałem kursy, manual php, przeglądałem to forum i udało mi się spłodzić ogólny zarys działającego logowania na sesjach.

index.php z ramkami
  1. <?
  2. $nazwa_sesji=session_name("baza_danych");
  3. session_start();
  4. ?>
  5. <!DOCTYPE ...
  6. <HTML>
  7.  
  8. <HEAD> ...
  9. <META> ...
  10. <TITLE>...
  11. </HEAD>
  12.  
  13.  
  14. <frameset rows="120,*">
  15.  
  16. <frame name="menu gorne" src="menu.php" frameborder=1 noresize>
  17.  
  18. <frameset cols="20%,*%">
  19. <frame name="menu boczne" src="list.php" frameborder=1 noresize>
  20. <frame name="okno glowne" src="main.php" frameborder=1 noresize>
  21.  
  22.  
  23. </html>

Menu boczne (list.php) oraz okno główne (main.php) zostawiam bez komentarza, bo tam powiedzmy, że nic ważnego nie ma (na razie).
Teraz menu górne (formularz do logowania lub tekst powitalny jeśli jest się zalogowanym)

menu.php
  1. <?
  2. $nazwa_sesji=session_name("baza_danych");
  3. ?>
  4. <!DOCTYPE...
  5. <HTML>
  6. <HEAD>
  7. <META...
  8. <TITLE>...
  9.  
  10. </HEAD>
  11. <body>
  12.  
  13. <?
  14. if (isset($_SESSION['logged']) && ($_SESSION['logged']==True) ) {
  15. echo '<p class=cent>Witaj na stronie, <b>'.$_SESSION['login'].'!</b></p>';
  16. echo '<p class=stand>Jesli chcesz sie wylogowac, kliknij <a href="logout.php" target="_parent">tutaj</a>.</p>';
  17. }
  18.  
  19. else {
  20. // cale echo to tabelka z opcjami do zalogowania i rejestracji - sory za bałagan
  21. echo '
  22. <table border=0 width="100%">
  23. <tr>
  24. <td width="40%"><p class=cent>Nie posiadasz jeszcze konta w naszym systemie?<br>
  25. <a href="register.php" target="_parent">>> Zarejestruj sie! <<</a></p></td>
  26. <td width="*">&nbsp;</td>
  27.  
  28. <td class=med width=60>
  29. Login:<br>
  30. Haslo:<br>
  31. </td>
  32.  
  33. <td width=180>
  34.  
  35. <form action="login.php" method="post" target="_parent">
  36.   <input type="text" name="login" size=10><br>
  37.   <input type="password" name="password" size=10>&nbsp;&nbsp;&nbsp;<input type=submit value="Zaloguj"><br>
  38. </form>
  39.  
  40. </td>
  41.  
  42. </tr>
  43. </table>
  44. '; // koniec echo
  45. }
  46.  
  47. ?>
  48. </BODY>
  49.  
  50. </HTML>

Super. Teraz gwóźdź programu, czyli login.php
  1. <?
  2. $nazwa_sesji=session_name("baza_danych");
  3. if (!isset($_SESSION['logged']) || ($_SESSION['logged']==False) ) {
  4.     $_SESSION['login']="default_user";
  5.     $_SESSION['password']="default_pass";
  6.     $_SESSION['logged']=False;
  7. }
  8. ?>
  9.  
  10. <!DOCTYPE...
  11. <HTML>
  12. <HEAD>
  13. <?
  14. $url = "index.php";
  15. $delay = "2";
  16. echo '<meta http-equiv="refresh" content="'.$delay.';url='.$url.'">'; // po $delay sekundach zostajemy przeniesieni na stronę główną niezależnie, czy ud
    ało nam się zalogować czy nie
  17. ?>
  18.  
  19. <META...
  20. <TITLE>...
  21. </HEAD>
  22. <body...>
  23. <?
  24. // uwaga! Ponizszy fragment kodu to czytanie z pliku; pozniej zrobie to na bazie d
    anych
  25. // w pliku passwd.txt mamy:
  26. // 1;raynold;raynold;
  27. // 2;user;passwd;
  28. // itd. Oczywiscie, mozna dodac wiecej danych i oddzielac innym znakiem
  29. // i prosze nie komentować, że nie wczytuje się całego pliku od razu. Wiem ;) Ale to jest małe i nie szkodzi nikomu. To tylko przejściowe.
  30. if (!file_exists("passwd.txt")) {
  31.     $file=fopen("passwd.txt","w");
  32.     fclose($plik);
  33.     }
  34. else {
  35.     $file=fopen("passwd.txt", "r");
  36.     flock($file,1);
  37.     $calosc=file('passwd.txt');
  38.     flock($file,3);
  39.     fclose($file);
  40.     }
  41.  
  42. for ($i=0; $i<count($calosc); $i++) {
  43.     $dane=explode(";", $calosc[$i]);
  44.     if (($_POST['login'] == $dane[1]) && ($_POST['password'] ==  $dane[2]) ) {
  45.         // jeśli udało nam się zalogować na istniejącego usera, to
  46.         // ustawiamy odpowiednie zmienne dla innych plików (np. menu.php)
  47.         $_SESSION['logged']=True;
  48.         $_SESSION['login']=$_POST['login'];
  49.         $_SESSION['password']=$_POST['password'];
  50.         break;
  51.     }
  52. }
  53.  
  54. if (isset($_SESSION['logged']) && ($_SESSION['logged']==True)) {
  55.     echo "<p class=stand>Witaj, ".$_SESSION['login']."!</p>";
  56. }
  57. else {
  58.     echo ("<p class=stand>Nie ma takiego uzytkownika, lub podales bledne haslo</p>");
  59.     }
  60. ?>
  61. <p class=stand>
  62. Kliknij <a href="index.php">tutaj</a>, zeby powrócic do strony glownej.</p>
  63. </HTML>


Super. Jeszcze tylko wylogowanie się (w menu.php dostępna jest opcja wylogowania się tylko, jeśli $_SESSION['logged'] jest True)

logout.php
  1. <?
  2. $nazwa_sesji=session_name("baza_danych");
  3. ?>
  4. <!DOCTYPE...>
  5. <HTML>
  6. <HEAD>
  7. <?
  8. $url = "index.php";
  9. $delay = "2";
  10. echo '<meta http-equiv="refresh" content="'.$delay.';url='.$url.'">';
  11. ?>
  12. <META>...
  13. <TITLE>...
  14. </HEAD>
  15. <BODY...>
  16. <?
  17. if ($_SESSION['logged']) {
  18. echo "<p class=stand>Zalogowany jako: ".$_SESSION['login'].". Nastepuje wylogowanie...</p>";
  19. echo "<p class=stand>Zostales wylogowany</p>";
  20. }
  21. ?>
  22.  
  23. <p class=stand>Za chwile zostaniesz przekierowany na <a href="index.php">strone glowna</a>.</p>
  24.  
  25. </BODY>
  26.  
  27. </HTML>


Działa smile.gif Super, cieszę się. Nie było aż tak źle, nawet samemu to wszystko zrobiłem. No ale znając życie, część rzeczy można zrobić lepiej itd. Teraz moje pytania i problemy:
  1. Czy to dorzucanie w każdym pliku przypisanie nazwy sesji jest konieczne, czy nazwa sesji sama automatycznie zostanie zczytana? (bez wpisywania tej nazwy mi nie działało, ale też do końca nie wiem, czy to tylko po tej poprawce zaczęło)
  2. Czy w każdym pliku muszę robić sprawdzanie typu -> menu.php -> linia 16, dzieląc każdy plik na dwie części: jak ma wyglądać, gdy jest zalogowany, a jak ma wyglądać, gdy nie jest?
  3. W pliku login.php odczytuję numery id, loginy, hasła (i inne). Wszystko cacy. Chcę się przerzucić na bazę danych (konkretnie Oracle, bez komentarzów proszę, że łatwiej w mySQL itd. Po prostu muszę to mieć w Oracle). I jest motyw taki: looknijcie na linijki 6 i 7 w login.php. Tam mam wpisanego usera i hasło, na którego mogę zalogować się domyślnie do bazy danych w celu przeszukania loginów i porównania haseł (potrzebne, gdy nikt teoretycznie nie jest zalogowany, a przecież muszę jakoś się dostać do bazy, prawda? I żeby się zarejestrować, i żeby się zalogować). Czy to tak właśnie wstępnie ma wyglądać? Prosiłbym o ewentualne małe wskazówki co z tym fantem zrobić/ jak to rozwinąć
  4. Czy jeśli już się zalogowałem do bazy danych jako user, już normalnie, nie jako ten defaultowy - czy muszę się logować (nie formularzem, ale czy muszę odpalać funkcje do logowania się do bazy) w każdym osobnym skrypcie php? Bo przypuszczam, że jak jest odpalony jeden skrypt, to wystarczy sie raz zalogować i można wielokrotnie kierować zapytania SQLowe do bazy w obrębie skryptu. Jednakże czy sesja przechowuje dane typu: user blabla jest cały czas zalogowany do bazy dopóki sesja nie zostanie zniszczona?
W index.php widać jeszcze plik list.php - tam będą różne linki, które po kliknięciu będą odpalały różne skrypty w ramce okno glowne. Oczywiście, tylko dla zalogowanych userów.

Na razie tyle pytań z mojej strony. Prosiłbym o wszelkie przydatne komentarze dotyczące sposobu logowania się, jaki przedstawiłem. Wszelka konstruktywna krytyka mile widziana. Oczywiście proszą pamiętać, że pliki są mocno okrojone, zostawione są tylko istotne rzeczy.

Pozdrawiam
Raynold
vtuner
moze nie jest moja odpowiedz zwiazana z twoimi pytaniami ale jesli bawisz sie w php to poco robic dzielenie na frame. Nie lepiej zrobic tabelke w indexie i includowac poszczegulne pliki.
camelleon
ja mam troch inne pytanie tez dot. logowania na sesjach

mam skrypt logowania

ktory opisalem w tym poscie
Logowanie

i dziala juz fajnie, ale jak to jest z tymi sesjami?

na pierwszej stonie jest login

i powstaje sesja z first_name i user_id

  1. <?php
  2.  
  3. session_name ('IDTwojejSesji');
  4. ini_set ('session.use_cookies', 0);
  5. $_SESSION['first_name'] = $row[1];
  6. $_SESSION['user_id'] = $row[0];
  7. ?>


i teraz na nastepnej strone sprawdzam czy jest

  1. <?php
  2. if (!isset($_SESSION['first_name'])) {
  3. ?>


a wlasciwie czy go nie ma...

no ale generalnie dziala

zostalem zalogowany

i chce przejsc do nasteponej strony dostepnej tylko dla zalogowanych uzytkownikow

i robie to samo

  1. <?php
  2. if (!isset($_SESSION['first_name'])) {
  3. ?>



i nie dziala!

czyli ze sesja wygasa?

jakies rady?

linki?

z gory dzieki

pozdrawiam
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.