ავტორიზაცია სესიის მეშვეობით 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. გახადეთ ისე, რომ ამ
გვერდის ნაწილი ყველა მომხმარებლისთვის იყოს ღია,
ხოლო ნაწილი - მხოლოდ ავტორიზებულისთვის.
შეცვალეთ თქვენი კოდი ისე, რომ წარმატებული ავტორიზაციის შემთხვევაში სესიაში ჩაიწეროს ასევე მომხმარებლის ლოგინი.
გახადეთ ისე, რომ საიტის ნებისმიერ გვერდზე შესვლისას, ავტორიზებული მომხმარებელი ხედავდეს საკუთარ ლოგინს, ხოლო არაავტორიზებული - ბმულს ავტორიზაციის გვერდზე.