CompZone.Org :: Artykuły :: PHP
Jaki jest Twój wiek?
40 - 59
26 - 39
19 - 25
13 - 18
12 i mniej
60 i więcej
Sonda Wyniki

Add to Google

System logowania oparty na sesjach

Nie będę się tutaj rozpisywał na temat zalet i wad systemów logowania, na temat ich niebezpieczeństw itp. W tym artykule postaram się jednak przedstawić prosty (to chyba mało powiedziane) system logowania oparty na sesjach.

Do przechowywania danych użytkowników użyjemy pliku tekstowego. System ten będzie pozbawiony możliwości rejestracji nowych użytkowników.

Format pliku

Ważny rzecz - w końcu zależy nam na możliwości przechowywania danych w pliku. Hasła i loginy użytkowników trzymać będziemy w pliku dane.txt w następującym formacie:

Nazwa,Hasło|Nazwa2,Hasło2|Nazwa3,Hasło3

Wykonanie skryptu

Poniżej przedstawiam pełny kod skryptu - jest on w miarę starannie komentowany.

 <?
session_start();

//funkcja do przeladowywania strony , aby nie bylo problemow z naglowkami przy header("location:");
function ReLoad(){
echo "<script> location.href="index.php"; </script>";
}

function Check_UsrData($_login,$_pass){
$_p = fopen("dane.txt","r");
//otworz plik na uprawnieniach odczytu
$plik = fread($_p,filesize("dane.txt"));
//odczytaj caly plik
fclose($_p);
//zamknij plik

$users = array();
$users = explode("|", $plik);
//rozdziel zawartosc pliku dzielac go na slowa pomiedzy znakiem |
$lineCount = count($users);

for ($i = 0; $i < count($users); $i++){
//w petli, odczytuj nazwe i haslo uzytkownika
$dane = explode(",",$users[$i]);
//poprzez rodzielenie jego danych znakiem "," (oddziela on login od hasla)
$nazwa = $dane[0];
$haslo = md5($dane[1]); //uwaga! czemu md5? aby nie trzymac w sesji "czystego" hasla to przechowujemy jego hash
if (($nazwa != "") && ($haslo != "")){ //sprawdz czy odczytane z pliku dane nie sa puste!
if (($nazwa == $_login) && ($haslo == $_pass)){ //jesli dane zgadzaja sie
return TRUE; //przerwij i zwroc informacje o zgodnosci :)
}
}
}

return FALSE;//jesli nie znaleziono danych - poinformuj o tym :)
}

//funkcja do wylogowywania :)
function LogOut(){
$_SESSION["usrname"] = "";
$_SESSION["usrpass"] = "";
ReLoad();
}

//jesli nie jestes zalogowany - wyswietl formularz
if (!Check_UsrData($_SESSION["usrname"], $_SESSION["usrpass"])) {

echo "<form method="post" action="$PHP_SELF?a=login">n";
echo "Login: <input name="f_login"><br>n";
echo "Hasło: <input name="f_passwd" type="password"><br>n";
echo "<input type="submit" value="ok"><br>n";
echo "</form>n";
} else { echo "ZALOGOWANO :)<br><a href="$PHP_SELF?a=logout">wyloguj</a>"; }

//sprawdzaj akcje :)
if (isset($_GET["a"])){
$act = $_GET["a"];
if ($act == "login") {
if (($_POST["f_login"] == "") || ($_POST["f_passwd"]=="")) { echo "podaj dane";}
$_SESSION["usrname"] = $_POST["f_login"];
$_SESSION["usrpass"] = md5($_POST["f_passwd"]);
ReLoad();
} else if ($act == "logout") {
LogOut();
}
}

?>

Zakończenie

System przedstawiony w artykule nie jest absolutnie bezpieczny - zresztą nie istnieje zabezpieczenie nie do obejścia. Oczywiście jako taki kod nie przyda sie zapewne na nic, ale wystarczy drobna modyfikacja i można stosować go na przykłąd w blogach.

Kodie @ 11-07-2006 20:48
Brak komentarzy...
Copyright © 2005-2006 Compzone.Org. Kopiowanie i wykorzystywanie materiałów zawartych na tej stronie bez zgody autora zabronione!