Přihlašovací stránka v ASP.NET

28. dubna 2002

V předchozích článcích jsem se pokusil shrnout základní architekturu a vlastnosti .NET frameworku, teď však nastává čas přeměnit teorii v praxi. Jako první aplikaci jsem zvolil jednoduchou přihlašovací stránku s definovanými uživateli a hesly přímo v kódu stránky.

Tento způsob se hodí například pro vaše soukromé ověření svých přátel, kteří mají přístup k „tajné“ části vašeho webu. Samozřemě realizace tohoto problému by byla možná (a snad i efektivnější) s použitím databázového zdroje. Pro první aplikaci v ASP.NET nám ale tento způsob bude dostačovat.

Nejdříve si vytvořte hlavní soubor webového formuláře, který bude obsahovat pouze grafický, formátovaný popis objektů na stránce a nazvěte ho login.aspx. ASP.NET formuláře mají totiž narozdíl od ASP stránek příponu ASPX, aby bylo na webu, kde se tyto dvě technologie mixují, zřejmé, která je která.

<%@ Page language=“c#“ Inherits= „login.LoginPage“ Codebehind=“login.aspx.cs“ %>
<!DOCTYPE HTML PUBLIC „-//W3C//DTD HTML 4.0 Transitional//EN“>
<HTML>
<HEAD>
<title>Přihlašovací stránka</title>
</HEAD>
<body>
<form id=“frmLogin“ method=“post“ runat=“server“>
<P><STRONG>Přihlašovací stránka (jmeno = tomas; heslo = heslo)</STRONG></P>
<P>Jméno:
<asp:textbox id=“txtLoginName“ runat=“server“></asp:textbox></P>
<P>Heslo:&nbsp;
<asp:textbox id=“txtPassword“ runat=“server“></asp:textbox></P>
<P><asp:button id=“btnLogin“ runat=“server“ text=“Přihlásit“></asp:button></P>
<P><asp:label id=“lblState“ runat=“server“ width=“378px“></asp:label></P>
</form>
</body>
</HTML>

Jak je vidět, stránka svým obsahem připomíná obyčejnou stránku HTML, až na tagy začínající <asp: ... Tyto tagy určují, že se na tomto místě zobrazí speciální ovládací prvky, které místo těchto tagů doplní svůj HTML kód. Celý tento dokument je přísně formátované XML. Tento soubor uložíte na serveru do adresáře wwwroot\login.

Rozebereme si ještě první tag, <%@ Page Language="c#" Inherits="login.LoginPage" Codebehind="login.aspx.cs"%>. Je to popisující tag stránky, kde se určují její atributy. Page Language je atribut, který informuje kompilátor o tom, v jakém jazyce je zdrojový kód napsán. Pokud tedy vložíte zdrojový kód aplikace přímo do stránky, tak se při jejím prvním zavolání zkompiluje pomocí kompilátoru určeného v tomto atributu. Atribut Inherits určuje, v jaké assembly a v jaké třídě je skryt kód pro obsluhu aplikace. Atribut Codebehind určuje, kde je uložený zdrojový kód aplikace, pokud není vložen přímo ve stránce.

Tento soubor bude další, který vytvoříte. Založte si tedy čistý soubor login.aspx.cs a do něho zapište tento obsah:

using System;
using System.ComponentModel;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
namespace login
{
public class LoginPage : System.Web.UI.Page
{
protected System.Web.UI.WebControls.TextBox txtLoginName;
protected System.Web.UI.WebControls.TextBox txtPassword;
protected System.Web.UI.WebControls.Button btnLogin;
protected System.Web.UI.WebControls.Label lblState;
override protected void OnInit(EventArgs e)
{
InitializeComponent();
base.OnInit(e);
}

private void InitializeComponent()
{
this.btnLogin.Click += new System.EventHandler(this.btnLogin_Click);
}
private void btnLogin_Click(object sender, System.EventArgs e)
{
string strLoginName = txtLoginName.Text;
string strPassword = txtPassword.Text;
if(strLoginName == „tomas“ && strPassword == „heslo“)
{
lblState.Text = „Přihlášen uživatel “ + strLoginName;
lblState.BackColor = System.Drawing.Color.Cyan;
return;
}
lblState.Text = „Špatné uživatelské jméno nebo heslo“;
lblState.BackColor = System.Drawing.Color.OrangeRed;
}
}
}

Po jeho uložení ho musíte zkompilovat řádkovým kompilátorem csc login.aspx.cs a výslednou assembly login.dll musíte uložit do bin adresáře, který vytvoříte na serveru ve složce wwwroot\login\bin.

Po prvním přístupu na tuto stránku si můžete povšimnout pomalejší odezvy ze serveru, která je způsobena právě probíhajícím JITterem, avšak jeho výsledek je uložen do cache a její opakované načítání již probíhá bez viditelného zpomalení. Dále si můžete povšimnout, že hodnoty v textových polích zůstaly zachovány, i když jsme pro tuto vlastnost žádný speciální kód nepsali. To je způsobeno tím, že při generování stránky jsou na klientský počítač posílány skryté informace o stavu aplikace, které se po odeslání formuláře opět posílají na server. Důkazem je HTML kód této stránky, na němž je tento element vidět.

<!DOCTYPE HTML PUBLIC „-//W3C//DTD HTML 4.0 Transitional//EN“>
<HTML>
<HEAD>
<title>Přihlašovací stránka</title>
</HEAD>
<body>
<form name=“frmLogin“ method=“post“ action=“login.aspx“ id=“frmLogin“>
<input type=“hidden“ name= „__VIEWSTATE“value=“dDwxOTE0NDY4ODE2Ozs+
Rz4j+dmY8/SF/84/taHsAsaok6w=“ />
<P><STRONG>Přihlašovací stránka (jmeno = tomas; heslo = heslo)</STRONG></P>
<P>Jméno:
<input name=“txtLoginName“ type=“text“ id=“txtLoginName“ /></P>
<P>Heslo:&nbsp;
<input name=“txtPassword“ type=“text“ id=“txtPassword“ /></P>
<P><input type=“submit“ name=“btnLogin“ value=“Přihlásit“ id=“btnLogin“ /></P>
<P><span id=“lblState“ style=“width:378px;“></span></P>
</form>
</body>
</HTML>

Funkce celé aplikace je tato. Poté, co uživatel klepne na tlačítko Přihlásit, jeho prohlížeč vezme obsahy textových polí a posílá je pomocí metody POST jako odpověď na tuto stránku. V kódu aplikace se vygeneruje událost btnLogin_Click (klepnutí na tlačítko). Z ní se vezmou obsahy textových polí a porovnají se s předdefinovanými konstantami a podle toho se vygeneruje odpověď.

Jen pro doplnění si zde můžeme všimnout že se tagy <asp: ... změnily na své HTML protějšky. Došlo k tomu proto, že mají nastavené runat="server", takže výstupem jakkoli složité ASP.NET aplikace je vždy čisté HTML.
 

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

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

Štítky: Články

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 *