[PHP] Jak zrobić stronę dostępną na hasło tylko dla wybranych użytkowników z wykorzystaniem cookies?
Chcesz udostępnić stronę wyłącznie dla wybranych użytkowników, którzy muszą podać prawidłowy login i hasło. Nie chcesz korzystać z pliku .htaccess i innych ustawień serwera, a PHP pracuje w trybie CGI.
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:
<?
$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> </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).