Autentizace uživatele v PHP
Zadání
Upravte existující projekt Anketa tak, aby ověřoval identitu uživatele.
Vyzkoušejte si, jak se pracuje se session:
Naučte se pracovat se session)
Vytvořte jednoduchý čítač přístupů na stránku z Vašeho počítače.
Postup pro vytvoření čítače
- Vytvořte skript index.php na Vašem serveru
- Na začátku skriptu se pokuste načíst existující session pomocí funkce
session_start().
-
Otestujte, zda je v poli $_SESSION položka pocetPristupu.
(
isset(proměnná)
).
Pokud položka v poli chybí, vytvořte ji a nastavte její hodnotu na 1.
Pokud položka existuje, zvyšte ji o 1.
-
Vypište hodnotu $_SESSION['pocetPristupu'] na obrazovku.
Ověření funkce čítače
Načtěte stránku a vyzkoušejte, že při každé aktualizaci se hodnota čítače zvýší.
Vymazání čítače
Doplňte tlačítko Reset, které čítač restartuje.
- Doplňte do stránky formulář s jediným tlačítkem Reset.
- Vyzkoušejte, že lze:
- nastavit hodnotu proměnné $_SESSION['pocetPristupu'] na 0,
- vymazat z pole $_SESSION proměnnou pocetPristupu
úplně (
unset(proměnná)
)
- smazat celou session (
session_destroy()
).
-
Restartování session uveďte jako samostatnou akci.
Po provedení restartu znovu spusťte skript v prohlížeči
(použijte přesměrování na tutéž stránku HTTP hlavičkou Location:
header("Location: index.php")
. Hlavička musí být uvedena
PŘED prvním výpisem HTML kódu.)
Ověření funkce čítače s resetem.
Čítač by měl pracovat takto: funkční čítač.
Ověření identity v databázi (login)
Vytvořte skript, který nabídne přihlašovací dialog. Po zadání přihlašovacích
údajů ověří identitu v databázi a v případě správného ověření
si ji zapamatuje.
Po přihlášení skript nabídne možnost odhlášení.
Přihlašovací obrazovka
Obrazovka, která se ukáže přihlášenému uživateli
Popis funkce skriptu
- Za normálních okolností skript ze session zjistí, zda je někdo přihlášen.
(např. z proměnné $_SESSION['user'])
Pokud je uživatel přihlášen, vypíše stránku prihlasen.php,
pokud není, vypíše stránku login.php s přihlašovacím
formulářem.
Obě stránky je vhodné umístit do adresáře pages. Měly by mít
příponu .php.
-
V okamžiku, kdy uživatel zadá přihlašovací údaje do přihlašovacího
formuláře a údaje odešle stiskem tlačítka, zavolá se skript
s parametrem action=login. (Použijeme volání metodou
post.)
V takovém případě se provede pouze ověření identity uživatele
podle údajů v databázi a nastaví se hodnota proměnné
$_SESSION['user'].
Po provedení akce se prohlížeč přesměruje na úvodní stránku
(pomocí HTTP hlavičky Location) a skončí.
-
Při kliknutí na tlačítko Odhlásit se podobně vyvolá akce
action=logout a zruší se hodnota proměnné
$_SESSION['user'].
-
Obě akce (přihlášení i odhlášení) je vhodné uložit do skriptů
login.php a logout.php v adresáři
actions.
Voláme je funkcí
require(actions/skript.php)
.
-
Je vhodné před spuštěním skriptu s akcí zkontrolovat, že případný
hacker nepodsunul do parametru action jiný kód. Ověření
provedeme tak, že zkontrolujeme, že hodnota parametru action
neobsahuje lomítko a že takový skript opravdu v adresáři
actions existuje:
function CheckFilename($fileName, $dir, $defaultValue) {
if (ereg('[\/]', $fileName) || !is_readable("$dir/$fileName"))
$fileName = $defaultValue;
return $fileName;
}
Ověření funkce skriptů.
Přihlašování by mělo pracovat takto: funkční přihlašování.
Doplnění autentizace do projektu Anketa
Projekt Anketa je skript, který čte z databáze odpovědí na
anketní otázky a zobrazuje statistiku odpovědí pro jednotlivé uživatele.
Doplňte projekt Anketa tak, aby zobrazoval statistiky pouze
přihlášeným uživatelům. Vyjděte z předchozích dvou příkladů.
Kód projektu Anketa najdete zde: projekt Anketa.
Funkční kód lze vyzkoušet zde:
funkční kód projektu Anketa.
Postup práce:
- Přihlašte se ke svému účtu (například na http://www.ic.cz)
- Vytvořte pomocí programu PHPMyAdmin a skriptů SQL tabulky. Naplňte tabulky daty.
- Nahrajte zdrojový kód projektu a upravte skripty ze vzorového projektu
tak, aby se přihlašovaly k vaší databázi.
(dbconnect.inc.php).
- Vyjděte z předchozího příkladu s přihlašováním a upravte ho
tak, aby se po přihlášení vypisovaly výsledky ankety.
- Vyzkoušejte, odlaďte.
- Celou složku s Vaším výsledkem zabalte do archivu s názvem
anketa.zip a umístěte do Vašeho adresáře na
k:\zkousky\simunek\.
- Přidejte do stejné složky i link na funkční verzi na IC.cz či jiném serveru
a pojmenujte ho anketa.url.
Link vyrobíte přetažením adresy z adresního řádku prohlížeče myší.
k:\zkousky\simunek\.
Jiná možnost je využít toho, že link je textový soubor s příponou .url
a obsahem podle vzoru:
[InternetShortcut]
URL=http://skolnihokuspokus.ic.cz/login
Rozšiření zadání (doporučena jako příprava k písemce):
- Přihlásit se mohou pouze uživatelé, kteří zodpověděli alespoň 2 otázky.
- Uživateli přidejte atribut Level:
- Uživatelé s levelem 0 se nemohou přihlásit.
- Uživatelé s levelem 2 mohou zobrazit i výsledky ostatních (mohou si vybrat uživatele).
- Uživatelé s levelem 1 mohou zobrazit jen svoje výsledky.
-
Vypište naráz všechny zodpovězené otázky všech uživatelů.
-
Doplňte statistiku: uživatel -- počet správně zodpovězených otázek.
-
Doplňte statistiku: otázka -- počet uživatelů, kteří zvolili jednotlivé
varianty odpovědi. (Zpřístupněte jen uživateli