Přístup na zaheslované na stránky pomocí ASP 1.

4. června 2001

Ukážeme si jednoduchý způsob, jak vymezit přístup na určitá stránky pouze vymezenému okruhu uživatelů bez použití databáze. Tento způsob sice neposkytuje žádný komfort při správě jmen a hesel, protože jejich seznam je dán natvrdo ve stránce. Pokud nemůžeme z nějakého důvodu použít databáze anebo tam, kde je velice málo uživatelů a nepotřebujeme často měnit hesla, tento postup zcela dostačuje.

Princip si ukážeme na tom nejjednodušším případě, kdy máme jenom jednoho uživatele. Potřebujeme jednak přihlašovací stránku, která bude obsahovat formulář na zadání jména a hesla současně i vyhodnocovací skript, jednak include, který vložíme do všech zabezpečených stránek, a který nepřihlášeného uživatele přesměruje na stránku s přihlášením.

Stránka login.asp, sloužící k přihlášení a ověření hesla by mohla vypadat třeba takto:

<%@ language=“VBSCRIPT“%>
<%
‚ Vynulujeme kontrolní session proměnnou
session(„JmenoUzivatele“) = „“
‚ Zkontrolujeme jméno a heslo
if request(„Jmeno“)=“pepa“ and request(„Heslo“)=“123″ then
    session(„JmenoUzivatele“) = request(„Jmeno“)
    response.redirect „index.asp“
end if
%>
<!DOCTYPE HTML PUBLIC „-//W3C//DTD HTML 4.0 Transitional//EN“>
<html>
<head>
</head>
<body>
<!– Přihlašovací formulář –>
<form action=“login.asp“ method=“post“>
Jméno<br>
<input type=“text“ name=“Jmeno“><br>
Heslo<br>
<input type=“password“ name=“Heslo“><br>
<input type=“submit“>
</form>
</body>
</html>

Stránka obsahuje vyhodnocovací skript a formulář s poli pro zadání jména a hesla. Tento formulář se odesílá opět na tuto stránku. Ve skriptu na začátku stránky login.asp nejprve kontrolní session proměnné JmenoUzivatele přiřadíme hodnotu prázdný řetězec. To proto, abychom tuto stránku mohli zároveň použít i k odhlášení. Pak porovnáme jméno a heslo s hodnotami v request.form (Při prvním zavolání stránky obsahují samozřejmě prázdné hodnoty, takže podmínka není splněna a dojde pouze k zobrazení formuláře.) Pokud jméno a heslo souhlasí, vložíme jméno uživatele do kontrolní session proměnné JmenoUzivatele a přesměrujeme na první ze zabezpečených stránek.

Na začátek všech zabezpečených stránek vložíme (nejlépe jako include) kód, kontrolující zda je někdo přihlášen:

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

Tento kód má velice jednoduchou funkci – pokud není přihlášen žádný uživatel, dojde k přesměrování na stránku login.asp.

Takže jak to celé bude fungovat: Při prvním zavolání stránky login.asp jsou v request.form(„jmeno“) i request.form(„heslo“) prázdné řetězce, k přesměrování tedy nedojde a zobrazí se formulář. Uživatel zadá jméno a heslo a formulář je oseslán opět na stránku login.asp. Pokud je jméno nebo heslo chybné, k přesměrování opět nedojde a znovu se zobrazí formulář. Pokud jméno i heslo souhlasí, je v session(„JmenoUzivatele“) uloženo jméno uživatele a dojde k přesměrování na některou ze zabezpečených stránek. Na všech zabezpečených stránkách je pak kód, který pokud je session(„JmenoUzivatele“) prázdná, provede přesměrování na stránku login.asp. Pokud se tedy někdo nepovolaný dostane na zabezpečenou stránku např. tak, že její URL napíše do adresního řádku, bude přesměrován na přihlašovací stránku. Odhlášení uživatele provedeme jednoduše zavoláním stránky login.asp. Proto na začátku skriptu dáváme do session(„JmenoUzivatele“) prázdný řetězec.

To byl jednoduchý příklad, vhodný tak pro pochopení principu. V praxi budeme asi požadovat trošku víc. Jednak budeme chtít mít několik uživatelů, jednak by to chtělo při špatném zadání jména či hesla na to uživatele upozornit. Takže si stránku login.asp trošku upravíme. Do formuláře přidáme skryté pole:

<input type=“hidden“ name=“Odeslano“ value=“1″>

podle kterého poznáme, zda se jedná o první volání stránky či zda byl odeslán formulář. Vyhodnocovací skript 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
    ‚ Vytvoříme objekt Dictionary
    set oHesla = CreateObject(„Scripting.Dictionary“)
    
    ‚ Pokud chceme při kontrole jména brát v úvahu
    ‚ velká a malá písmena, nastavíme 0, pokud ne
    ‚ (tj. Pepa=pepa) nastavíme 1
    oHesla.CompareMode = 1
    
    ‚ Vytvoříme seznam uživatelů a hesel
    oHesla.add „pepa“, „123“
    oHesla.add „karel“, „abc“
    oHesla.add „admin“, „000“
    
    ‚ Hledáme jméno a kontrolujeme heslo
    if not oHesla.Exists(Jmeno) then
        ‚ Tohle jméno neexistuje
        Chyba = 1
    elseif oHesla.Item(Jmeno)<>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

Náš nový skript funguje takto: – nejprve si načteme hodnoty z request.form do proměnných Jmeno, Heslo a Odeslano, aby se nám s nimi lépe pracovalo. Pak opět vložíme do session(„JmenoUzivatele“) prázdný řetězec. Následuje blok kontroly jména a hesla, který se provede pouze, pokud je Odeslano=“1″, tedy pokud byla stránka volána odesláním formuláře.

Ke kontrole jmena a hesla bychom mohli použít několikeré opakování podmínky if-then z prvního příkladu. Mnohem elegantnější a přehlednější bude použít objekt Dictionary, se kterým jste se mohli seznámit v tomto článku. To oceníte v okamžiku, kdy budete potřebovat upravit seznam uživatelů a jejich hesel. Takže vytvoříme dictionary objekt oHesla a nastavením vlastnosti CompareMode určíme, zda se jméno uživatele bude porovnávat textově či binárně (tj. jestli se rozlišují malá a velká písmena). Pak objekt naplníme seznamem uživatelů a jejich hesel. Jméno klíče je jméno uživatele a hodnota klíče je jeho heslo. Díky použití objektu dictionary máme všechna jména a hesla pěkně na jednom místě, což nám v budoucnu usnadní jejich správu.

Následuje kontrola jména a hesla. Nejprve zjistíme, jestli existuje klíč se jménem Jmeno. Pokud ne, znamená to, že tento uživatel neexistuje a proměnné Chyba přiřadíme hodnotu 1. (Tuto proměnnou využijeme později, kdy podle její hodnoty oznámíme uživateli, proč se mu nepodařilo se přihlásit.) Pokud klíč existuje, porovnáme jeho hodnotu s hodnotou Heslo. Pokud heslo nesouhlasí, nastavíme proměnnou Chyba na 2. Pokud nenastala ani jedna tato situace, znamená to, že jméno a heslo souhlasí a můžeme uživatele přihlásit. To znamená, že zapíšeme jeho jméno do session(„JmenoUzivatele“) a přesměrujeme na první ze zabezpečených stránek.

Ještě nám zbývá využít proměnnou Chyba k vypsání zprávy, proč se uživateli nepodařilo přihlášení. Někam na stránku (nejspíš asi pod přihlašovací formulář) umístíme tento kód:

<% if Chyba=1 then %>
    Špatné jméno.<br>
    (Sem můžeme dát např. odkaz na registraci.)
<% elseif Chyba=2 then %>
    Špatné heslo.<br>
    (Sem můžeme dát např. odkaz na poslání hesla e-mailem.)
<% end if %>

Ještě vysvětlení, proč jako kontrolní hodnotu používáme zrovna jméno uživatele – toto jméno můžeme vypisovat na všech zabezpečených (vlastně i nezabezpečených) stránkách:

if session(„JmenoUzivatele“)=““ then     response.write „Neni přihlášen žádný uživatel“ else     response.write „Přihlášen uživatel: “ & session(„JmenoUzivatele“) end if

Pokud z nějakého důvodu nechcete nebo nemůžete použít session proměnnou, můžete použít cookies. K vynulování použijete:

response.cookies(„JmenoUzivatele“).domain = „url_domény“
response.cookies(„JmenoUzivatele“).path = „/“
response.cookies(„JmenoUzivatele“) = „“

K po přihlášení nastavíte její hodnotu takto:

response.cookies(„JmenoUzivatele“).domain = „url_domény“
response.cookies(„JmenoUzivatele“).path = „/“
response.cookies(„JmenoUzivatele“) = Jmeno

A ke kontrole přihlášeného uživatele:

if response.cookies(„JmenoUzivatele“)=““ then

A to je vše. Zdrojový soubor login.asp si stáhněte zde.

Mohlo by vás také zajímat

Nejnovější

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *