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:

  1. 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

    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.

    1. Doplňte do stránky formulář s jediným tlačítkem Reset.
    2. Vyzkoušejte, že lze:
      1. nastavit hodnotu proměnné $_SESSION['pocetPristupu'] na 0,
      2. vymazat z pole $_SESSION proměnnou pocetPristupu úplně (unset(proměnná))
      3. smazat celou session (session_destroy()).
    3. 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č.

  2. 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

    1. 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.
    2. 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čí.
    3. Při kliknutí na tlačítko Odhlásit se podobně vyvolá akce action=logout a zruší se hodnota proměnné $_SESSION['user'].
    4. Obě akce (přihlášení i odhlášení) je vhodné uložit do skriptů login.phplogout.php v adresáři actions. Voláme je funkcí require(actions/skript.php).
    5. 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:

  1. Přihlašte se ke svému účtu (například na http://www.ic.cz)
  2. Vytvořte pomocí programu PHPMyAdmin a skriptů SQL tabulky. Naplňte tabulky daty.
  3. 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).
  4. 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.
  5. Vyzkoušejte, odlaďte.
  6. 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\.
  7. 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):

  1. Přihlásit se mohou pouze uživatelé, kteří zodpověděli alespoň 2 otázky.
  2. Uživateli přidejte atribut Level:
  3. Vypište naráz všechny zodpovězené otázky všech uživatelů.
  4. Doplňte statistiku: uživatel -- počet správně zodpovězených otázek.
  5. Doplňte statistiku: otázka -- počet uživatelů, kteří zvolili jednotlivé varianty odpovědi. (Zpřístupněte jen uživateli