Autoryzacja przez sesję w PHP
Nasza autoryzacja powinna działać tak: użytkownik,
który chce się zalogować na stronie, wchodzi
na stronę login.php, wprowadza poprawne
login i hasło i następnie porusza się po stronach
strony już będąc zalogowanym.
Aby inne strony serwisu wiedziały o tym, że nasz użytkownik jest zalogowany, musimy przechowywać w sesji oznaczenie o tym.
Na razie nasza autoryzacja nie jest całkiem działająca, ponieważ sesji jeszcze nie podłączyliśmy i inne strony serwisu nie mogą zrozumieć, czy użytkownik jest zalogowany, czy nie.
Będziemy przechowywać oznaczenie o autoryzacji w zmiennej
sesji $_SESSION['auth'] - jeśli jest tam
zapisane true, to użytkownik jest zalogowany,
a jeśli null - to nie zalogowany.
Wprowadźmy odpowiednią poprawkę do naszego kodu:
<?php
session_start();
if (!empty($_POST['password']) and !empty($_POST['login'])) {
$login = $_POST['login'];
$password = $_POST['password'];
$query = "SELECT * FROM users WHERE login='$login' AND password='$password'";
$res = mysqli_query($link, $query);
$user = mysqli_fetch_assoc($res);
if (!empty($user)) {
$_SESSION['auth'] = true;
} else {
// nieprawidłowo wprowadził login lub hasło
}
}
?>
Teraz na dowolnej stronie serwisu możemy sprawdzić, czy użytkownik jest zalogowany czy nie, w ten sposób:
<?php
if (!empty($_SESSION['auth'])) {
}
?>
Można zamknąć tekst jakiejś strony całkowicie dla niezalogowanego użytkownika:
<?php if (!empty($_SESSION['auth'])): ?>
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<p>tekst tylko dla zalogowanego użytkownika</p>
</body>
</html>
<?php else: ?>
<p>proszę się zalogować</p>
<?php endif; ?>
Można zamknąć tylko część strony:
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<p>tekst dla każdego użytkownika</p>
<?php
if (!empty($_SESSION['auth'])) {
echo 'tekst tylko dla zalogowanego użytkownika';
}
?>
<p>tekst dla każdego użytkownika</p>
</body>
</html>
Załóżmy, że na naszej stronie, oprócz strony login.php,
są jeszcze strony 1.php, 2.php
i 3.php. Zrób tak, aby do tych
stron mógł uzyskać dostęp tylko zalogowany
użytkownik.
Załóżmy, że na naszej stronie jest jeszcze strona
index.php. Zrób tak, aby część
tej strony była otwarta dla wszystkich użytkowników,
a część - tylko dla zalogowanych.
Zmodyfikuj swój kod tak, aby przy udanej autoryzacji do sesji zapisywał się również login użytkownika.
Zrób tak, aby przy wejściu na dowolną stronę serwisu, zalogowany użytkownik widział swój login, a nie zalogowany - link na stronę autoryzacji.