Авторизация чрез сесия на PHP
Нашата авторизация трябва да работи по следния начин: потребител,
който иска да се авторизира на сайта, отива
на страницата login.php, въвежда правилните
потребителско име и парола и след това преминава през страниците
на сайта вече като авторизиран.
За да могат другите страници на сайта да знаят, че нашият потребител е авторизиран, ние трябва да съхраняваме в сесията бележка за това.
Засега нашата авторизация не е напълно работеща, тъй като все още не сме включили сесията и другите страници на сайта не могат да разберат дали потребителят е авторизиран или не.
Ще съхраняваме бележка за авторизацията в сесийната променлива
$_SESSION['auth'] - ако там
е записано true, тогава потребителят е авторизиран,
а ако е null - тогава не е авторизиран.
Нека внесем съответната корекция в нашия код:
<?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 {
// грешно въведено потребителско име или парола
}
}
?>
Сега на всяка страница на сайта можем да проверим дали потребителят е авторизиран или не, по следния начин:
<?php
if (!empty($_SESSION['auth'])) {
}
?>
Може да се забрани достъпът до текста на дадена страница изцяло за неавторизиран потребител:
<?php if (!empty($_SESSION['auth'])): ?>
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<p>текст само за авторизиран потребител</p>
</body>
</html>
<?php else: ?>
<p>моля, авторизирайте се</p>
<?php endif; ?>
Може да се забрани само част от страницата:
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<p>текст за всеки потребител</p>
<?php
if (!empty($_SESSION['auth'])) {
echo 'текст само за авторизиран потребител';
}
?>
<p>текст за всеки потребител</p>
</body>
</html>
Да приемем, че на нашия сайт, освен страницата login.php,
има и страници 1.php, 2.php
и 3.php. Направете така, че до тези
страници да може да получи достъп само авторизиран
потребител.
Да приемем, че на нашия сайт има и страница
index.php. Направете така, че част
от тази страница да е отворена за всички потребители,
а част - само за авторизирани.
Модифицирайте вашия код така, че при успешна авторизация в сесията да се записва и потребителското име на потребителя.
Направете така, че при посещение на която и да е страница на сайта, авторизираният потребител да вижда своето потребителско име, а неавторизираният - връзка към страницата за авторизация.