V předchozím článku jsme si ukázali, jak omezit přístup na část stránek pouze pro určité uživatele bez použití databáze. Při větším počtu uživatelů se však správa jmen a hesel přímo v přihlašovací stránce stává nepraktickou. Navíc bychom chtěli uživatelům například umožnit, aby si sami mohli změnit heslo. V tom případě nám nezbývá, než uložit jména a hesla uživatelů do databáze.

Pro náš příklad si vytvoříme databázi data.mbd s tabulkou tabUzivatele, která bude obsahovat jména a hesla uživatelů.

id Jmeno Heslo
1 pepa 123
2 karel abc
3 admin 000

Na stránce login.asp z druhého příkladu v minulém článku se změní pouze vyhodnocovací skript na začátku stránky, HTML část zůstane beze změny. Skript pro kontrolu jména a hesla bude vypadat takto:

‚ Přečteme data z formuláře do proměnných
Jmeno = request.form(„Jmeno“)
Heslo = request.form(„Heslo“)
Odeslano = request(„Odeslano“)
‚ Vynulujeme kontrolní session proměnnou
session(„JmenoUzivatele“) = „“
‚ —— Pokud se jedná o odeslaný formulář, ——-
‚ —— kontrolujeme jméno a heslo ——-
if Odeslano=“1″ then
    
    ‚Otevřeme si databázi
    set data=Server.CreateObject(„AdoDB.Connection“)
    data.Open „Driver={Microsoft Access Driver (*.mdb)}; DBQ=“ & Server.MapPath(„data.mdb“) & „;“
    
    ‚sestavíme si sql dotaz a vytvoříme recordset
    sql = „SELECT jmeno, heslo FROM tabUzivatele WHERE jmeno='“ & jmeno & „‚“
    set rs = data.execute(sql)
    
    ‚ Hledáme jméno a kontrolujeme heslo
    if rs.EOF then
        ‚ Tohle jméno neexistuje
        Chyba = 1
    elseif rs(„heslo“)<>Heslo then
        ‚ Špatné heslo
        Chyba = 2
    else
        ‚ Vše OK, přihlásíme uživatele
        session(„JmenoUzivatele“) = Jmeno
        response.redirect „index.asp“
    end if
end if

Jistě na první pohled vidíte, že je dost podobný skriptu, který jsme použili minule. Takže si popíšeme, jak skript pracuje. Opět si nejprve načteme hodnoty z formuláře do proměnných jmeno, heslo a odeslano a vynulujeme kontrolní session proměnnou. Pak následuje kontrola jména a hesla, která proběhne pouze tehdy, je-li odeslano=“1″. To totiž znamená, že stránka byla volána odesláním formuláře a ne odjinud (v tom případě bychom neměli žádné jméno a heslo ke kontrole).

Nyní se dostáváme k místu, odkud se náš nový skript od minulého liší. Nejprve si vytvoříme spojení s databází. V našem případě s Accessovskou databází data.mbd. Pak si sestavíme SQL dotaz, který nám z tabulky vybere řádek uživatele se jménem jmeno a tímto SQL dotazem vytvoříme recordset rs. (Říkám řádek a ne řádky, protože předpokládám, že neexistuje víc uživatelů se stejným jménem.) Nyní přistoupíme k vlastnímu vyhodnocení jména a hesla. Podmínka rs.EOF je splněna tehdy, pokud ukazatel v recordsetu je za posledním záznamem. Po vytvoření recordsetu je ukazatel vždy na prvním záznamu. Pokud je zároveň na konci, znamená to, že recordset je prázdný, neobsahuje žádný řádek. Neboli uživatel se jménem jmeno vůbec neexistuje. Poznamenáme si tedy že došlo k chybě č. 1. Pokud tomu tak není, znamená to, že záznam uživatele jmeno jsme našli a porovnáme jeho heslo. Pokud nesouhlasí, došlo k chybě č. 2. Pokud nedošlo ani k jedné z předchozích možností, znamená to, že jméno i heslo souhlasí. Zapíšeme jméno přihlášeného uživatele do session(„JmenoUzivatele“) a přesměrujeme na první ze zabezpečených stránek.

Zbytek je již stejný jako v příkladu v minulém článku. Pokud nebylo možno uživatele přihlásit, použijeme proměnnou chyba k vypsání důvodu proč a opět zobrazíme přihlašovací formulář.

U větších projektů (a evidenci uživatelů v databázi použijeme spíš u většího projektu) budeme často chtít nějakým způsobem monitorovat činnost uživatelů. To znamená, že pokud uživatel udělá například nějakou změnu v databázi, budeme si chtít poznamenat, který uživatel tuto změnu provedl. V tom případě by bylo výhodnější poznamenat si místo jména uživatele jeho id. V tom případě se místo session(„JmenoUzivatele“) použijeme session(„idUzivatele“). SQL dotaz se nám změní takto:

sql = „SELECT id, jmeno, heslo FROM tabUzivatele WHERE jmeno='“ & jmeno & „‚“

Id uživatele si poznamenáme takto:

session(„idUzivatele“) = rs(„id“)

A ke kontrole, zda je přihlášen nějaký uživatel na zabezpečených stránkách pozměníme takto:

if session(„idUzivatele“) = „“ then response.redirect „login.asp“

Celou stránku login2.asp, která slouží k přihlášení se za pomoci databáze spolu s ukázkovou databází si můžete stáhnout zde. Přeji vám hezký den.

Starší komentáře ke článku

Pokud máte zájem o starší komentáře k tomuto článku, naleznete je zde.

Žádný příspěvek v diskuzi

Odpovědět