Jak zrobić stronę dostępną na hasło tylko dla wybranych użytkowników z wykorzystaniem cookies?

Problem: Chcesz udostępnić stronę wyłącznie dla wybranych użytkowników, którzy muszą podać prawidłowy login i hasło z wykorzystaniem cookies.

Rozwiązanie:

Na niektórych serwerach PHP pracuje w trybie CGI. Nie można więc skorzystać z klasycznego logowania z użyciem $_SERVER["PHP_AUTH_USER"] lub $_SERVER["PHP_AUTH_PW"].

Wypada napisać własny, prosty moduł, który po dołączeniu do wszystkich stron za pomocą include() będzie sprawdzał, czy użytkownik jest poprawnie zalogowany. Do pamiętania zalogowanego użytkownika wykorzystamy cookie, dlatego poniższy kod musi być zawsze na samej górze strony, jako pierwszy:
Kod:
<?
$self = $_SERVER["PHP_SELF"];
$login="janek";
$haslo="kubek";

if ($_COOKIE["haslo"]=="ok" or
   ($_POST["l"]==$login and $_POST["h"]==$haslo)) {
  setcookie("haslo", "ok", mktime()+60*30, "/"); // 30 minut
} else {
  echo "<center><form action=\"$self\" method=\"post\"><table>";
  echo '<tr><td>login:</td><td><input type="text" name="l"
  style="width:100px;" /></td></tr>
  <tr><td>hasło:</td><td><input type="text" name="h"
  style="width:100px;" /></td></tr>
  <tr><td>&nbsp;</td><td><input type="submit" value=" zaloguj "
  style="width:100px;" /></td></tr></table></form></center>';
  exit;
}
?>
Nasze logowanie to zwykły warunek logiczny i ustawianie cookie. Jeżeli cookie o nazwie haslo ma wartość "ok", oznacza to, że użytkownik jest zalogowany. Jeżeli podał prawidłowy login i hasło, też jest zalogowany i ustawiane jest cookie ważne przez najbliższe 30 minut.

Jeżeli użytkownik nie ma ustawionego cookie lub źle podał login i hasło, pojawia się formularz logowania, gdzie może wpisać login i hasło.

Cookie ustawiane jest na 30 minut za każdym razem, gdy nastąpi przeładowanie strony. W ten sposób po okresie bezczynności dłuższym niż 30 minut użytkownik musi zalogować się ponownie (gdyby odszedł od klawiatury nastąpi automatyczne wylogowanie).

A oto wersja skryptu dla wielu użytkowników:
Kod:
<?
$self = $_SERVER["PHP_SELF"];
$u[] = "janek|k14rek";
$u[] = "piotr|pp98u7";
$u[] = "anna|stre98";

foreach($u as $uzytkownik) {
  $ue = explode("|", $uzytkownik);
  if ($_COOKIE["haslo"]=="ok" or
      $_POST["l"]==$ue[0] and $_POST["h"]==$ue[1]) {
    setcookie("haslo", "ok", mktime()+60*30, "/"); // 30 minut
    $zalogowany = 1;
    break;
  }
}

if (!$zalogowany) {
  echo "<form action=\"$self\" method=\"post\"><table>";
  echo '<tr><td>login:</td><td><input type="text" name="l"
  style="width:100px;" /></td></tr>
  <tr><td>hasło:</td><td><input type="text" name="h"
  style="width:100px;" /></td></tr>
  <tr><td>&nbsp;</td><td><input type="submit" value=" zaloguj "
  style="width:100px;" /></td></tr></table></form>';
  exit;
}
Skrypt działa na tej samej zasadzie co poprzedni, tylko obsługuje wielu użytkowników wpisanych do tablicy $u, gdzie pierwszy wyraz to login, a drugi to hasło.

Źródło: www.hellweb.pl
Administratorzy wyrazili zgodę na publikacje