Jistě jste už někdy potřebovali na svoje stránky umístit informace, ke kterým by měl mít přístup pouze omezený okruh návštěvníků. Jednoduché zaheslování pomocí Javascriptu již bylo na stránkách Interval.cz popisováno, ale díky tomu, že šlo o skript na straně klienta, bylo velice jednoduché heslo odhalit. Dnes vám předvedu řešení, které je postaveno na databázi uložené na serveru a ASP.

Díky tomu, že heslo se ověřuje na serveru, je tento způsob o něco bezpečnější. Jméno a heslo sice není umístěno přímo ve stránce, ale jelikož se posílá v hlavičce http:// požadavku nešifrovaně, lze jej velice snadno zjistit. Ovšem, když řešení popisované ve článku použijete na protokolu https://, kde jsou data přenášená mezi klientem a serverem šifrována, získáte tak bezpečné ověření identity návštěvníka.

Nejprve si nadefinujeme strukturu databáze, ve které budeme uchovávat informace o uživatelích. V našem případě bude databáze obsahovat ID uživatele, přihlašovací jméno, heslo, email a položku pro zablokování účtu. Množství údajů v databázi záleží zcela na vašich potřebách a můžete si ji podle svých potřeb neomezeně rozšiřovat.

Uživatelé se budou přihlašovat zadáním přihlašovacího jména a hesla. Položka Platnost slouží pro dočasné zablokování uživatelského účtu.

Pomocí následujícího SQL skriptu vygenerujete databázovou tabulku:

CREATE TABLE [dbo].[USERS] (
   [id] [int] IDENTITY (1, 1) NOT NULL ,
   [jmeno] [char] (30) NULL ,
   [heslo] [char] (10) NULL ,
   [email] [char] (50) NULL ,
   [platnost] [bit] NULL
) ON [PRIMARY]

Pro umožnění přihlášení návštěvníka vytvoříme stránku login.asp, kam umístíme formulář, který bude obsahovat dvě položky určené pro vyplnění samotným uživatelem a jednu položku skrytou. Položky, které bude návštěvník vyplňovat jsou pochopitelně uživatelské jméno a heslo. Ve skryté položce bude schován zpracovaný parametr, který bude obsahovat informace o tom, ze které stránky byla stránka login.asp zavolána. Důvod použití této položky si vysvětlíme později.

Obsah tohoto formuláře předáme pomocí metody POST skriptu ve stejné stránce, který provede ověření vyplněných údajů v databázi a na základě výsledku ověření provede přesměrování na příslušné stránky.

Ve skriptu login.asp je již téměř tradičně použit soubor connect.asp, který obsahuje informace a funkce pro práci s databází. Stálí čtenáři již asi vědí, že obsah souboru connect.asp byl popisován v článku ASP, databáze a objekt Connection.

<!–#include file=“connect.asp“–>
<%if Request.Form(„jmeno“)=““ or Request.Form(„heslo“)=““ then%>
<FORM action=“login.asp“ method=POST id=form name=form>
Jméno:<INPUT type=“text“ id=jmeno name=jmeno><br>
Heslo:<INPUT type=“password“ id=heslo name=heslo><br>
<INPUT type=“text“ id=odkud name=odkud value=“<%=Request.QueryString(„odkud“)%>“
<INPUT type=“submit“ value=“Submit“ id=submit1 name=submit1>
<INPUT type=“reset“ value=“Reset“ id=reset1 name=reset1>
</FORM>
<%else
if isconnectdb() then
sql=“select id from users where jmeno='“&Request.Form(„jmeno“)&“‚ and heslo='“&Request.Form(„heslo“)&“‚“
set rs=objconn.execute(sql)
if not rs.eof and not rs.bof then
session(„USERID“)=rs(„id“)
if len(request.Form(„odkud“))>0 then
Response.Redirect(Request.Form(„odkud“))
else
Response.Redirect(„ok.htm“)
end if
else
Response.Redirect(„sorry.htm“)
end if
rs.close
set rs=nothing
else
Response.Redirect(„sorry.htm“)
end if
end if%>

Skript ověří jméno, heslo a platnost uživatelského účtu v databázi a v případě správného ověření dojde k „zapamatování“ informací o přihlášení a následné přesměrování na příslušnou stránku.

Údaje o přihlášení se ukládají do kolekce session. Na základě takto uložené informace máme v celé ASP aplikaci informaci o přihlášeném uživateli. Jak této informace či její nedostupnosti (není přihlášen uživatel) využít ve své aplikaci si ukážeme o něco později.

V případě, že máme informaci o tom, ze které stránky byl přihlašovací dialog vyvolán, provedeme přesměrování zpět na tuto stránku, v opačném případě přesměrujeme na stránku ok.htm. Pokud však uživatel nezadal správné údaje pro přihlášení, provedeme přesměrování na stránku sorry.htm. Stránky ok.htm a sorry.htm můžou obsahovat například toto:

Kód souboru ok.htm:

<html>
<head>
   <title>Úspěšné přihlášení
</head>
<body>
Přihlášení proběhlo v pořádku
</body>
</html>

Kód souboru sorry.htm:

<html>
<head>
   <title>Chyba
</head>
<body>
Špatné jméno nebo heslo
</body>
</html>

HTML kód souborů ok.htm a sorry.htm je čistě informativní a nemá žádnou jinou funkci, než zobrazit informaci o stavu přihlášení. Je zcela na vašem uvážení, co si do těchto souborů umístíte.

Nyní máme vše připraveno pro umožnění přihlášení uživatele a v následující části článku si ukážeme, jak zamezit přístupu uživatele na libovolnou stránku bez toho, aby se nejdříve přihlásil.

Jelikož informace o tom, zda je uživatel přihlášen či není, máme uloženy v session, můžeme jednoduchým otestováním příslušné proměnné zjistit, zda můžeme či naopak nesmíme pustit návštěvníka na požadovanou stránku.

Kód pro otestování si vložíme do souboru islogin.asp. Tento soubor budeme poté vkládat pomocí INCLUDE všude, kde budeme mít potřebu ověřit identitu návštěvníka.

<%
if session(„USERID“)=““ then
response.redirect(„login.asp?odkud=“&server.URLEncode(Request.ServerVariables(„URL“)))
end if
%

Výše uvedený kód způsobí v případě, že uživatel není přihlášen, přesměrování na přihlašovací dialog (stránka login.asp) a předá mu jako parametr URL, kam má být uživatel přesměrován po správném přihlášení.

Soubor islogin.ASP budeme vkládat do ASP stránek pomocí následujícho kódu:

<!–#include file=“islogin.asp“–>

Možná, že zde postrádáte možnost vkládat, či mazat jednotlivé uživatelské účty. Ano, máte pravdu, tuto část jsem do tohoto článku nezahrnul. Pro správu uživatelských účtu použijte prozatím nástroj, který je součástí dodávky vaší databáze. V případě použití MS SQL Serveru je to SQL Server Enterprise Manager.

To je pro dnešek vše. Zdrojové soubory si můžete stáhnout zde. V případném příštím článku na toto téma si budete moci přečíst o tom, jak umožnit uživateli změnit heslo nebo jak vytvořit rozhraní pro správu uživatelských účtů. Záleží na vašem zájmu.

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