ďťż

[php] System logowania oparty na sesjach

       

Podstrony


telcocafe

Mam Eksperta z numeru 9-10 2005 i jest tam o systemie logowania na sesjach. Są trzy pliki: index.php, strona.php, uprawnienia.php

Oto pliki:
index.php
<?php session_start(); session_register("status_uzyt"); echo "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\">"; echo "<html><head>"; echo "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=iso-8859-2\" />"; echo "<meta http-equiv=\"content-language\" content=\"pl\">"; echo "<title>Prosta strona ze skryptem logowania</title>"; echo "<style>"; echo "p {margin: 20px; background-color: #efefef;}"; echo "</style>"; echo "<body>"; function pokaz_okno_log() { echo "<p>"; echo "<form name=\"logowanie\" action=\"index.php\" method=\"post\">"; echo "Login: <input type=\"text\" name=\"login\"><br>"; echo "Hasło: <input type=\"password\" name=\"haslo\"><br>"; echo "<input type=\"hidden\" name=\"strona\" value=\"sprawdz\">"; echo "<input type=\"submit\" value=\"Zaloguj\">"; echo "</p>"; } // Na początku skryptu najlepiej jest sprawdzić czy zmienna nie zawiera // żadnych danych - jeżeli nie zawiera możemy nadać jej naszą wartość // zabraniającą dostępu do strony if(empty($_SESSION['status_uzyt'])) { $_SESSION['status_uzyt'] = "0"; } // Pobieramy zmienną, która decyduje o tym, jaka strona jest wyświetlana if($HTTP_POST_VARS["strona"] == "") { $strona = $HTTP_GET_VARS["strona"]; } else { $strona = $HTTP_POST_VARS["strona"]; } // Sprawdzamy zawartość zmiennej $strona i wywołujemy odpowiednią akcję skryptu if($strona == "") { // Zmiennna nie została ustawiona czyli skrypt został wywołany bez niej. // Wyświetlamy więc stronę główną z możliwością przejścia do strony ukrytej echo "<p>To jest strona główna serwisu. Istnieją jeszcze trzy strony, lecz są one przeznaczone wyłącznie dla zalogowanych użytkowników: <a href=\"index.php?strona=uzytkownik\">Użytkownika</a>.</p>"; if($_SESSION['status_uzyt'] == 0) { pokaz_okno_log(); } } elseif($strona == "zaloguj") { pokaz_okno_log(); } elseif($strona == "sprawdz") { include("./uprawnienia.php"); for($i=0;$i<count($Uzytkownik);$i++) { $UzytkownikDane[$i] = explode("|", $Uzytkownik[$i]); } // W tym miejscu srpawdzamy czy użytkownik podał odpowiednie dane w formularzu for($i=0;$i<count($Uzytkownik);$i++) { if($HTTP_POST_VARS["login"] == $UzytkownikDane[$i][0] && $HTTP_POST_VARS["haslo"] == $UzytkownikDane[$i][1]) { $_SESSION['status_uzyt'] = $UzytkownikDane[$i][2]; echo "<p>Gratuluję - zalogowałeś się na konto \""; echo $UzytkownikDane[$i][0]."\". Teraz możesz przejść do "; if($_SESSION['status_uzyt'] == 3) { echo "<a href=\"index.php?strona=superadministrator\">podstrony Superadministraotra</a> oraz do "; echo "<a href=\"index.php?strona=administrator\">podstrony Administraotra</a>, a także do "; echo "<a href=\"index.php?strona=uzytkownik\">podstrony Użytkownika</a> "; } elseif($_SESSION['status_uzyt'] == 2) { echo "<a href=\"index.php?strona=administrator\">podstrony Administraotra</a> oraz do "; echo "<a href=\"index.php?strona=uzytkownik\">podstrony Użytkownika</a> "; } elseif($_SESSION['status_uzyt'] == 1) { echo "<a href=\"index.php?strona=uzytkownik\">podstrony Użytkownika</a> "; } } } if($_SESSION['status_uzyt'] == 0) { // Jeżeli użytkownik podał nieprawidłowe dane, wówczas ustalamy wartość zmiennej // na 0, wyświetlamy odpowiedni komunikat i pokazujemy okno do logowania $_SESSION['status_uzyt'] = 0; echo "<p>Logowanie nieudane. Spróbuj jeszcze raz.</p>"; pokaz_okno_log(); } } elseif($strona == "wyloguj") { // W tym miejscu wylogowujemy użytkownika. Wystarczy zmienną "$status_uzyt" ustawić // na wartość 0 i pokazać odpowiedni komunikat $_SESSION['status_uzyt'] = 0; echo "<p>Zostałeś wylogowany. Aby przejść na stronę główną <a href=\"index.php\">kliknij w tym miejscu</a>.</p>"; } elseif($strona == "superadministrator") { // Strona dostępna tylko dla Superadministratora if($_SESSION['status_uzyt'] == 3) { echo "<p>Znajdujesz się na stronie dostępnej tylko dla Superadministratorów. <a href=\"index.php?strona=wyloguj\">Możesz się wylogować.</a></p>"; } else { echo "<p>Ta strona dostępna jest tylko dla zalogowanych użytkowników (Superadministratorów).</p>"; pokaz_okno_log(); } } elseif($strona == "administrator") { // Strona dostępna tylko dla administratora if($_SESSION['status_uzyt'] == 2 || $_SESSION['status_uzyt'] == 3) { echo "<p>Znajdujesz się na stronie dostępnej tylko dla Superadministratorów i Administratorów. <a href=\"index.php?strona=wyloguj\">Możesz się wylogować.</a></p>"; } else { echo "<p>Ta strona dostępna jest tylko dla zalogowanych użytkowników (Superadministratorów i Administratorów).</p>"; pokaz_okno_log(); } } elseif($strona == "uzytkownik") { // Strona dostępna tylko dla Użytkownika if($_SESSION['status_uzyt'] == 1 || $_SESSION['status_uzyt'] == 2 || $_SESSION['status_uzyt'] == 3) { echo "<p>Znajdujesz się na stronie dostępnej tylko dla Superadministratorów, Administratorów i zalogowanych Użytkowników. <a href=\"index.php?strona=wyloguj\">Możesz się wylogować.</a></p>"; } else { echo "<p>Ta strona dostępna jest tylko dla zalogowanych użytkowników.</p>"; pokaz_okno_log(); } } echo "</body>"; echo "</html>"; ?>

strona.php
<?php session_start(); session_register("jest_adminem"); $plik_skryptu = "strona.php"; function naglowek($tytul){ echo "<html>"; echo "<head>"; echo "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=iso-8859-2\" />"; echo "<meta http-equiv=\"content-language\" content=\"pl\">"; echo "<title>{$tytul}</title>"; echo "<body>"; } function pokaz_okno_log($komunikat) { global $plik_skryptu; echo "<p>{$komunikat}</p>"; echo "<form name=\"logowanie\" action=\"{$plik_skryptu}\" method=\"post\">"; echo "Login: <input type=\"text\" name=\"login\"><br>"; echo "Hasło: <input type=\"password\" name=\"haslo\"><br>"; echo "<input type=\"hidden\" name=\"strona\" value=\"sprawdz\">"; echo "<input type=\"submit\" value=\"Zaloguj\"></form>"; } function stopka(){ echo "</body>"; echo "</html>"; } if(empty($_SESSION['jest_adminem'])) { $_SESSION['jest_adminem'] = "nie"; } if($HTTP_POST_VARS["strona"] == "") { $strona = $HTTP_GET_VARS["strona"]; } else { $strona = $HTTP_POST_VARS["strona"]; } if($strona == "") { if($_SESSION['jest_adminem'] == "tak") { ?> Tutaj wpisujemy całą treść dokumentu, który chcemy zabezpieczyć. Możemy wewnątrz tej treści umieści odnośnik umożliwiający wylogowanie się internauty, na przykład taki: <a href=<?=$plik_skryptu?>?strona=wyloguj>Wyloguj</a>. <br> Bez żadnych przeszkód możemy również przenieść się na inną tajną stronę, juz bez konieczności logowania, na przykład na <a href="strona2.php">tajną stronę numer 2</a>. <? } else { naglowek("Uzytkownik nie jest zalogowany!"); pokaz_okno_log("Aby ogl±dać tę stronę musisz być zalogowany!"); stopka(); } } elseif($strona == "sprawdz") { if($HTTP_POST_VARS["login"] == "admin" && $HTTP_POST_VARS["haslo"] == "tajne") { $_SESSION['jest_adminem'] = "tak"; naglowek("Login i hasło poprawne!"); echo "<p>Zalogowanie zakończone sukcesem.<br>"; echo "Można już otworzyć <a href=\"{$plik_skryptu}\">tajn± podstronę</a></p>"; stopka(); } else { $_SESSION['jest_adminem'] = "nie"; naglowek("Bł±d logowania"); pokaz_okno_log("Zalogowanie się nie powiodło. Spróbuj jeszcze raz."); stopka(); } } elseif($strona == "wyloguj") { $_SESSION['jest_adminem'] = "nie"; naglowek("Wylogowanie"); echo "<p>Nast±piło wylogowanie. <a href=\"{$plik_skryptu}\">PrzejdÄ˝ na stronę główn±</a></p>"; stopka(); } ?>

oraz uprawnienia.php
<?php $Uzytkownik[] = "superadmin|haslo|3"; $Uzytkownik[] = "admin|haslo|2"; $Uzytkownik[] = "uzytkownik|haslo|1"; ?>

No i wszystko jest git. Tylko problem polega na tym jak zrobić żeby w pliku index.php funkcja sprawdzała dane nie z pliku uprawnienia.php tylko z pliku tekstowego np. passwords.txt, gdzie nazwy i hasła użytkowników byłyby rozmieszczone w każdej linijce w takiej postaci:
nazwa_uzytkownika|haslo
i żeby nie było żadnych statusów superadmina, admina tylko samych użytkowników.
Ja myślę, że w miejscu gdzie jest ten fragment kodu:
elseif($strona == "sprawdz") { include("./uprawnienia.php"); for($i=0;$i<count($Uzytkownik);$i++) { $UzytkownikDane[$i] = explode("|", $Uzytkownik[$i]); } // W tym miejscu srpawdzamy czy użytkownik podał odpowiednie dane w formularzu for($i=0;$i<count($Uzytkownik);$i++) { if($HTTP_POST_VARS["login"] == $UzytkownikDane[$i][0] && $HTTP_POST_VARS["haslo"] == $UzytkownikDane[$i][1]) { $_SESSION['status_uzyt'] = $UzytkownikDane[$i][2]; echo "<p>Gratuluję - zalogowałeś się na konto \""; echo $UzytkownikDane[$i][0]."\". Teraz możesz przejść do "; if($_SESSION['status_uzyt'] == 3) { echo "<a href=\"index.php?strona=superadministrator\">podstrony Superadministraotra</a> oraz do "; echo "<a href=\"index.php?strona=administrator\">podstrony Administraotra</a>, a także do "; echo "<a href=\"index.php?strona=uzytkownik\">podstrony Użytkownika</a> "; } elseif($_SESSION['status_uzyt'] == 2) { echo "<a href=\"index.php?strona=administrator\">podstrony Administraotra</a> oraz do "; echo "<a href=\"index.php?strona=uzytkownik\">podstrony Użytkownika</a> "; } elseif($_SESSION['status_uzyt'] == 1) { echo "<a href=\"index.php?strona=uzytkownik\">podstrony Użytkownika</a> "; } } }
trzeba będzie zmienić. Proszę o jakąś pomoc. Z góry bardzo serdecznie dziękuję :P :D

[SIZE=1][COLOR=red]Poprawienie code na codebox :Marcin
Użytkownik Marcin edytował ten post 14 lipiec 2006, 13:56


1. Zmiast includowac uprawnienia.php daj passwords.txt :D - Ale lol bedzie :)
2. Posuwaj wstawki dla Administratorów i SuperAdministratorów
3. Otworz plik, wczytaj dane, uzyj explode i wsio.

No własnie jak to napisać czy to może być tak:
elseif($strona == "sprawdz") { $plik=fopen('passwords.txt','r'); //otwieram stronę tylko do odczytu flock=($plik, LOCK_SH);         while (!feof($plik))  //szuka początek linii {  $UzytkownikDane[$i] = explode("|", $Uzytkownik[$i]); //tutaj nie wiem jak zrobić żeby każdą linijkę zapisywało do tablicy $UzytkownikDane[$i] }
Właśnie w tym jest problem :blink:

Byłbym wdzięczny za tą pomoc :D



za bardzo nak ombinowales, zlookaj to
http://66.249.93.104...=7&client=opera

To nic nie pomoże. Funkcja musi odczytywać plik passwords.txt i zapamiętać dane w zmiennych login i haslo, żeby nie trzeba było całego kodu index.php modyfikować :(

Kombinuję i nic. Ciągle czegoś brakuje :(. No proszę o poprawny kod, będę bardzo wdzięczny :) :)

Pomożecie?? :(

  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • nvm.keep.pl

  • Sitedesign by AltusUmbrae.