Wortal Webmastera - źródło informacji dla tworzących strony www |  e-marketing / programowanie / webdesign / narzędzia          powered by CubeMatic.com

 

  WEBMASTERS    SKRYPTY

Strona glówna
HTML
JavaScript
PHP
CGI
MYSQL
CSS
SSI
WML
SGML
Offline
Photoshop
PHP
CGI
ASP
JavaScript

Artykuly

FORUM

  NARZEDZIA      SYSTEM

Grafika
Szablony
Czcionki
Porady

Download

  e-BIZNES

Artykuly
Linki
Profesjonalna strona
Nasza oferta
E-booki
Tanie strony www Warszawa

  NIEZBEDNIK

Za darmo
Kasa
Rejestrator www
Aktualności
Domeny
Konwerter ISO

  INNE

DOS
O stronie
Ksiega gości
Kontakt

Zgloś bląd!

 Polecamy:
 śmieszne zdjecia
 Hiszpanski Warszawa


Szukaj pliku



 SERWIS  

System logowania

Zdarza się, że niektóre dane na naszej stronie nie powinny być oglądane przez osoby postronne. Najlepszym sposobem, aby uchronić się przed taką ewentualnością jest stworzenie systemu logowania i o tym będzie traktował niniejszy artykuł.

Pobierz gotowy plik (10kb)

Na początku będziemy potrzebowali zbioru użytecznych funkcji (plik [func.php]). Do tych najbardziej potrzebnych zaliczają się:

  • login($login, $passwd) - logowanie użytkownika

  • logout() - wylogowanie użytkownika

  • auth() - sprawdza czy użytkownik jest zalogowany

  • user_exists($login) - sprawdza czy użytkownik istnieje już w naszej bazie (plik [users.dat])

  • add_user($login, $passwd) - rejestruje nowego użytkownika, dodaje wpis do pliku [users.dat]

<?php

#definicje stalych
define("DATA", "users.dat");
define("SESID", SESSION_NAME() . "=" . SESSION_ID());

# zaloguj user-a
function login($login, $passwd)
{
  
$line = file(DATA);
  foreach(
$line as $temp)
  {
    
$str = explode(",", $temp);
    if(
chop($str[0])==$login && chop($str[1])==$passwd)
    {
      
$_SESSION["USER_AUTH"]  = True;
      
$_SESSION["USER_LOGIN"] = $_POST["login"];
      return
True;
    }
  }
  
$login = htmlentities($login);
  return
False;
}

# wyloguj user-a
function logout()
{
  
$_SESSION["USER_AUTH"]  = False;
  
$_SESSION["USER_LOGIN"] = Null;
}

# czy użytkownik istnieje
function user_exists($login)
{
  
$line = file(DATA);
  foreach(
$line as $temp)
  {
    
$str = explode(",", $temp);
    if(
chop($str[0])==$login) return True;
  }
  return
False;
}

# dodaje nowego użytkownika
function add_user($login, $passwd)
{
  
$files = fopen(DATA, "a");
  
flock($files, 2);
  
fputs($files, $login . "," . $passwd . "\n");
  
flock($files, 3);
  
fclose($files);
}

# sprawdz czy zalogowany
function auth()
{
  return (
$_SESSION["USER_AUTH"] == True);
}

?>

Stała DATA definiuje ścieżkę dostępu do pliku z hasłami, plik ten powinien znajdować się w katalogu niedostępnym dla zwykłego zjadacza chleba np. może to być katalog PRIVATE lub, tak jak u mnie, nad katalogiem PUBLIC_HTML. W ostateczności możesz go zapisać w katalogu razem z resztą plików, hasła są kodowane więc ewentualny podgląd pliku niewiele komuś pomoże. Jeśli zajdzie taka potrzeba, należy ustawić prawa dostępu do pliku "users.dat" na 644. Najbardziej sympatyczna jest funkcja auth(), dzięki której wiadomo czy ktoś jest zalogowany czy nie. Funkcja logout() natomiast powoduje wylogowanie użytkownika.

Te dziwnie wyglądające napisy $_SESSION[*] to nic innego jak zmienne sesyjne, które są dostępne przez cały czas trwania sesji. $_SESSION["USER_LOGIN"] zawiera nazwę użytkownika, a $_SESSION["USER_AUTH"] mówi nam czy użytkownik jest zalogowany czy też nie (true, false).

Następne funkcje służą odpowiednio do: sprawdzenia czy użytkownik istnieje w bazie i dodawania nowego użytkownika.

W nagłówku pliku "index.php" (na samym początku) należy umieścić skrypt, który w odpowiednim momencie wywoływałby te funkcje. Oprócz tego powinien załadować bibliotekę z funkcjami i startować sesję. Tak wygląda ten skrypt: [plik: session.php]

<?php
# start sesji
session_start();

# biblioteka z funkcjiami
include "func.php";

# logowanie, wylogowanie itp
switch ($page)
{
  case
"login"  :
                  
$login  = htmlentities(substr($_POST["login"], 0, 255));
                  
$passwd = htmlentities(substr($_POST["passwd"], 0, 255));
                  
login($login, md5($passwd));
                  break;
  
  case
"logout" : logout();
                  break;
}
?>

Jak widać skrypt ten wywołuje odpowiednie funkcje w zależności od zawartości zmiennej $page.

Zmienna ta zawiera nazwę pliku (bez rozszerzenia) która ma być dołączona w prawej komórce tabeli (plik: "index.php"). Przed dołączeniem zostaje dodane rozszerzenie ".php". Przykładowy link wygląda następująco: <a href="index.php?page=nazwa_pliku"></a>. Formularz także musi przypisać jakoś wartość zmiennej $page w przeciwnym razie nie można byłoby wywołać odpowiednich funkcji.

Formularz [plik: login.frm]

<form action="index.php" method="post">
<input type="hidden" name="page" value="login">
<input type="hidden" name="<?=SESSION_NAME()?>" value="<?=SESSION_ID()?>">

Login<br>
<input type="text" name="login" value="<?=$_POST["login"]?>">
<br>

Haslo<br>
<input type="password" name="passwd" value="">
<input type="submit" name="submit" value="Loguj">

</form>

Mając te wszystkie funkcje jesteśmy w stanie zrobić już prawie wszystko co jest związane z logowaniem i rejestracją użytkownika.

Aby wyświetlić dowolny tekst dla użytkownika tylko zalogowanego wystarczy użyć funkcji auth(). Np:

<?php
  
if auth() print "Jesteś zalogowany " . $_SESSION["USER_LOGIN"];
?>

$_SESSION["USER_LOGIN"] zwraca nazwę zalogowanego użytkownika.

Logowanie też wygląda prosto:

login(jakiś_login, md5(hasło)) gdzie funkcja md5() koduje hasło, następnie funkcja poszukuje użytkownika w pliku [users.dat]. Jeśli użytkownik istnieje i hasło jest poprawne funkcja zwraca True. Należy zaznaczyć, że funkcja login() nie służy nam do sprawdzania czy użytkownik jest zalogowany, do tego celu służy funkcja auth().

Udostępniłem też możliwość rejestracji nowych użytkowników. Funkcja add_users(login, hasło) dodaje nowego użytkownika konta, a funkcja user_exists(login) sprawdza czy przypadkiem przyszły użytkownik nie znajduje się w naszej bazie.

Plik do rejestracji [registration.php] wygląda następująco:

<?php
$result
= False;
if(
$submit)
{
  if(!
$login || !$passwd)
  {
    echo
"<p class=error align=center>Wszystkie pola są obowiązkowe.</p>\n";
  }
  elseif(!
eregi("^[_[:alnum:]-]{1,10}$",$login))
  {
    echo
"<p class=error align=center>Nieprawidłowy login.</p>\n";
  }
  elseif(!
eregi("^[_[:alnum:]-]{3,10}$",$passwd))
  {
    echo
"<p class=error align=center>Niepoprawne hasło.</p>\n";
  }
  elseif(
user_exists($login))
  {
    echo
"<p class=error align=center>Login \"$login\" jest już zajęty.</p>\n";
  }
  else
  {
    
$result = True;
    
// formatuje wprowadzone dane
    
$login = strtolower($login);
    
add_user($login, md5($passwd));

    
// informacjie o nowym koncie
    
echo "<p class=ok align=center>Konto zostało utworzone.</p>\n";      
    echo
"Jeśli zapomnisz hasło to koniec :-), wszystkie hasła są kodowane. ";
    echo
"Możesz teraz się zalogować i przetestować konto.";  
  }
}

if(!
$result)
{
  
// usuwa tagi html z formularza
  
$login  = htmlentities(substr($_POST["login"], 0, 255));
  include
"registration.frm";
}
?>

Pobierz gotowy plik (10kb)

Autor
Mariusz Kacki

<== WSTECZ =

R E K L A M A

^top^