Аутентификация онлайн урок.


Для начала разместим вызов функции session_start() вначале всех скриптов, где нам понадобится переменная сессии. Это обязательно, иначе - сессия не будет начата.

В файле login.php, если форма прошла валидацию, нам необходимо обратиться к базе данных и поискать там в таблице users пользователя с указанным именем и паролем.

$username = $db->escape($form->getUsername());
$password = new Password( $db->escape($form->getPassword()) );

$res = $db->query("SELECT * FROM users WHERE username = '{$username}' AND password = '{$password}' LIMIT 1");


Далее, если поиск результатов не дал, выведем сообщение об этом. Иначе запишем в переменную сессии имя пользователя:

if (!$res) {
$msg = 'No such user found';
} else {
$user = $res[0]['username'];
Session::set('user', $user);
header('location: index.php?msg=You have been logged in');
}


В случае успеха мы редиректимся на index.php с сообщением об успехе. Изменим немного index.php:

<?php
session_start();
require_once 'session.class.php';
?>

<h1><a href="register.php">Register</a></h1>

<?php if (Session::has('user')) : ?>
<h1><a href="logout.php">Logout (<?=Session::get('user'); ?>)</a></h1>
<?php else : ?>
<h1><a href="login.php">Login</a></h1>
<?php endif; ?>

<h1><a href="admin.php">Go to admin page</a></h1>

<br/>

<?=isset($_GET['msg']) ? $_GET['msg'] : '';?>


На этой странице будет отображаться ссылка Login, если пользователь еще не прошел аутентификацию, иначе будет выведена ссылка Logout с именем пользователя в скобках.

В файле logout.php мы уничтожим сессию и перенаправим пользователя на главную:

session_start();
require_once 'session.class.php';

Session::destroy();

header('Location: index.php?msg=You have been logged out');


В index.php также указана ссылка на файл admin.php, который представляет собой страницу с ограниченным уровнем доступа:

session_start();
require_once 'session.class.php';

if (Session::has('user')) {
echo 'Hello, ' . Session::get('user');
} else {
echo 'Restricted area! Get out!';
// header('Location: index.php');
}


Если пользовател в системе, то выводится приветствие, иначе - сообщение о закрытом доступе (или можно перенаправить на главную).