Εξουσιοδότηση μέσω συνεδρίας σε 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. Κάντε έτσι ώστε ένα μέρος
αυτής της σελίδας να είναι ανοιχτό για όλους τους χρήστες,
και ένα μέρος - μόνο για εξουσιοδοτημένους.
Τροποποιήστε τον κώδικά σας έτσι ώστε μετά από επιτυχημένη εξουσιοδότηση στη συνεδρία να καταγράφεται επίσης και το όνομα σύνδεσης του χρήστη.
Κάντε έτσι ώστε κατά την είσοδο σε οποιαδήποτε σελίδα του ιστότοπου, ο εξουσιοδοτημένος χρήστης να βλέπει το όνομα σύνδεσής του, ενώ ο μη εξουσιοδοτημένος - έναν σύνδεσμο προς τη σελίδα εξουσιοδότησης.