Autentisering via session i PHP
Vår autentisering ska fungera så här: en användare,
som vill logga in på webbplatsen, går
till sidan login.php, anger rätt
användarnamn och lösenord och sedan navigerar på webbplatsens sidor
redan inloggad.
För att andra sidor på webbplatsen ska veta att vår användare är inloggad måste vi lagra en markering om detta i sessionen.
För tillfället är vår autentisering inte helt funktionell, eftersom vi ännu inte har anslutit sessionen och andra sidor på webbplatsen inte kan förstå om användaren är inloggad eller inte.
Vi kommer att lagra markeringen om autentisering i sessionsvariabeln
$_SESSION['auth'] - om
true är skrivet där, så är användaren inloggad,
och om null - så är hen inte inloggad.
Låt oss göra motsvarande ändring i vår kod:
<?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 {
// fel användarnamn eller lösenord
}
}
?>
Nu på vilken sida som helst på webbplatsen kan vi kontrollera om användaren är inloggad eller inte, på detta sätt:
<?php
if (!empty($_SESSION['auth'])) {
}
?>
Man kan stänga av texten på en sida helt för icke-inloggade användare:
<?php if (!empty($_SESSION['auth'])): ?>
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<p>text endast för inloggade användare</p>
</body>
</html>
<?php else: ?>
<p>vänligen logga in</p>
<?php endif; ?>
Man kan stänga av endast en del av sidan:
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<p>text för alla användare</p>
<?php
if (!empty($_SESSION['auth'])) {
echo 'text endast för inloggade användare';
}
?>
<p>text för alla användare</p>
</body>
</html>
Antag att på vår webbplats, förutom sidan login.php,
finns även sidorna 1.php, 2.php
och 3.php. Gör så att endast inloggade
användare har tillgång till dessa sidor.
Antag att på vår webbplats finns ytterligare en sida
index.php. Gör så att en del
av denna sida är öppen för alla användare,
och en del - endast för inloggade.
Modifiera din kod så att vid lyckad autentisering så sparas även användarens användarnamn i sessionen.
Gör så att när man besöker vilken sida som helst på webbplatsen, så ser den inloggade användaren sitt användarnamn, och den utloggade - en länk till inloggningssidan.