Teď je : <% Response . Write ( Now (). ToString ());% > p > body > html >
11 / 50
Úvod Dynamický web ASP.NET ASP.NET – třídy Web forms Kontrolky Validace kontrolek Stavy Bezpečnost Konec
ASPX soubor
I
Direktivy I I I
I
Serverové kontrolky I
I
elementy s atributem runat=server
Serverové skripty I
I
<%@ direktiva atributy %> Page Import – ekvivalent using (zahrnuje NameSpace)
script element s atributem runat=server
HTML
12 / 50
Úvod Dynamický web ASP.NET ASP.NET – třídy Web forms Kontrolky Validace kontrolek Stavy Bezpečnost Konec
Code behind
I
Oddělení kódu a designu stránek zvyšuje přehlednost
I
Kód stránky lze uložit do separátního souboru
I
Překladem projektu vznikne assembly, která se umístí do adresáře bin
I
Stránka dědí od stránky Inherits ze souboru CodeFile @ Page language = C # CodeFile = " stranka . cs " Inherits = " stranka " ? >
13 / 50
Úvod Dynamický web ASP.NET ASP.NET – třídy Web forms Kontrolky Validace kontrolek Stavy Bezpečnost Konec
Příklad
I WebForm1.aspx <% @ Page language = " c # " CodeFile = " WebForm1 . aspx . cs " Inherits = " WebForm1 " % > < html > < body > < h1 > Ahoj světe h1 >
Teď je : < input type = " Text " id = " Cas " runat = " server " value = " moc hodin " > p > body > html > I WebForm1.aspx.cs ... public class WebForm1 : System . Web . UI . Page {
private void Page_Load ( object sender , System . EventArgs e ) { Cas . Value = DateTime . Now . ToString (); } ... } 14 / 50
Úvod Dynamický web ASP.NET ASP.NET – třídy Web forms Kontrolky Validace kontrolek Stavy Bezpečnost Konec
System.Web.UI.Page
I
Reprezentuje .ASPX soubor (Web Form)
I
Soubor .ASPX se naparsuje, přeloží do potomka Page a uloží do assembly
I
Je-li použit code-behind, dědí se od této třídy
15 / 50
Úvod Dynamický web ASP.NET ASP.NET – třídy Web forms Kontrolky Validace kontrolek Stavy Bezpečnost Konec
Co se děje při generování I
Bloky skriptu s atributem runat=”server” se vloží přímo do definice třídy < script runat = " server " > DateTime Now () { return DateTime . Now ; } script >
I
Každá serverová kontrolka se přidá do třídy jako atribut příslušného typu < asp : Label id = " Label1 " runat = " server " > Lable1 asp : Label >
I
Bloky <% %> se vloží spolu s HTML do metody, která se volá při renderování stránky Teď je : <% Response . Write ( Now (). ToString ());% > 16 / 50
Úvod Dynamický web ASP.NET ASP.NET – třídy Web forms Kontrolky Validace kontrolek Stavy Bezpečnost Konec
Události
I Init I I
v okamžiku inicializace kontolky na začátku
I Load I I
když je kontrolka nahrána do objektu Page stále začátek – nedošlo ke zpracování událostí
I PreRender I I
po obsluze událostí před vykreslením stránky
I Unload I I
po vykreslení stránky před uvolněním z paměti
17 / 50
Úvod Dynamický web ASP.NET ASP.NET – třídy Web forms Kontrolky Validace kontrolek Stavy Bezpečnost Konec
System.Web.HttpContext
I
Zapouzdřuje všechny informace o jednom požadavku I
I
HttpRequest Request HttpResponse Response HttpApplicationState Application HttpSessionState Session
I
...
I I
I
Snadno přístupná I
vlastnost Context
18 / 50
Úvod Dynamický web ASP.NET ASP.NET – třídy Web forms Kontrolky Validace kontrolek Stavy Bezpečnost Konec
System.Web.HttpApplication
I
Slučuje metody, vlastnosti a události, které jsou společné pro celou aplikaci
I
Umožňuje změnit chování aplikace Lze oddědit
I
I
Global.asax I Application_Start I Session_Start I Application_BeginRequest I ...
19 / 50
Úvod Dynamický web ASP.NET ASP.NET – třídy Web forms Kontrolky Validace kontrolek Stavy Bezpečnost Konec
Web formuláře I
I
Formuláře jsou jednou z možností, jak na stránky umístit aktivní obsah (tlačítka, textboxy,. . .) Příklad
<% @ Page language = " C # " % > < html > < script runat = " server " > void Page_Load () { text2 . Value = text1 . Value ; text1 . Value = DateTime . Now . ToString (); } script > < body > < form runat = " server " > < h1 > Ahoj světe h1 > Teď je : < input type = " text " id = " text1 " runat = " server " > < br / > Předtím bylo : < input type = " text " id = " text2 " runat = " server " > < br / > < input type = " submit " runat = " server " ID = " Submit1 " NAME = " Submit1 " > form > body > html > 20 / 50
Úvod Dynamický web ASP.NET ASP.NET – třídy Web forms Kontrolky Validace kontrolek Stavy Bezpečnost Konec
Kontrolky
I
Elementy označené atributem runat="server" existují i na serveru I
I
Každá kontrolka je na serveru reprezentovaná proměnnou I
I
serverové kontrolky název lze určit atributem ID
Atribut runat="server" lze nastavit pro každý html element I
příklad
... h1 . Attributes . Add ( " style " ," color : red " ); ... < h1 runat = " server " id = " h1 " > Ahoj světe h1 >
21 / 50
Úvod Dynamický web ASP.NET ASP.NET – třídy Web forms Kontrolky Validace kontrolek Stavy Bezpečnost Konec
HTML kontrolky
I I
Reprezentují HTML elementy označené atributem runat="server" Ke každému elementu vytvořen v .NETu datový typ I I
I
těsně kopíruje vlastnosti elementu těsně kopíruje interface elementu
Problém s přístupem k takovýmto objektům I
vytvoření jednotného přístupu – Web kontrolky
22 / 50
Úvod Dynamický web ASP.NET ASP.NET – třídy Web forms Kontrolky Validace kontrolek Stavy Bezpečnost Konec
Web kontrolky
I
Ucelenější hierarchie kontrolek
I
Jednotné rozhraní
I
Systém vázání dat Kontrolky se renderují jako jeden či více html elementů
I
I
I I
uživatel je odstíněn
Možnost vytvářet vlastní kontrolky Existence několika složitějších kontrolek I I I
Calendar DataGrid DataList
23 / 50
Úvod Dynamický web ASP.NET ASP.NET – třídy Web forms Kontrolky Validace kontrolek Stavy Bezpečnost Konec
Příklad I Zdroják <% @ Page language = " C # " % > < html > < script runat = " server " > void Page_Load () { text2 . Text = text1 . Text ; text1 . Text = DateTime . Now . ToString (); } script > < body > < form id = " Form1 " method = " post " runat = " server " > < h1 > Ahoj světe h1 > Teď je : < asp : Label id = " text1 " runat = " server " > asp : Label > < br / > Předtím bylo : < asp : Label id = " text2 " runat = " server " > asp : Label > < br / > < asp : Button Text = " Obnov " runat = " server " ID = " Button1 " > asp : Button > form > body > html > 24 / 50
Úvod Dynamický web ASP.NET ASP.NET – třídy Web forms Kontrolky Validace kontrolek Stavy Bezpečnost Konec
Příklad I
HTML výstup
< html > < body > < form name = " Form1 " method = " post " action = " index1 . aspx " id = " Form1 " > < input type = " hidden " name = " __VIEWSTATE " value = " dDwtMTYp ... " < h1 > Ahoj světe h1 > Teď je : < span id = " text1 " > 20.11.2005 23:42:50 span > < br / > Předtím bylo : < span id = " text2 " > 20.11.2005 23:36:33 span > < br / > < input type = " submit " name = " _ctl0 " value = " Obnov " / >
< input type = " hidden " name = " __EVE NTVAL IDATION " value = " / wEW .. form > body > html >
25 / 50
Úvod Dynamický web ASP.NET ASP.NET – třídy Web forms Kontrolky Validace kontrolek Stavy Bezpečnost Konec
Web formuláře
I I
Kontrolky na formuláři označené atributem runat="server" HTML kontrolky I I
těsně kopírují rozhraní dané HTML specifikací příklad < input type = " text " runat = " server " > input >
I
Web kontrolky I I
unifikované rozhraní pro práci s web formuláři příklad < asp : TextBox runat = " server " > asp : TextBox >
26 / 50
Úvod Dynamický web ASP.NET ASP.NET – třídy Web forms Kontrolky Validace kontrolek Stavy Bezpečnost Konec
Uživatelské kontrolky
I
Jednoduchá kontrolka I I I I I I
oddědit od Control nebo WebControl přidat data a logiku kontrolky překrýt metodu Render zkompilovat do assembly nakopírovat assembly do adresáře bin zaregistrovat kontrolku <% @ Register TagPrefix = " Custom " Namespace = " CustomControls " Assembly = " CustomControls " % >
27 / 50
Úvod Dynamický web ASP.NET ASP.NET – třídy Web forms Kontrolky Validace kontrolek Stavy Bezpečnost Konec
Uživatelské kontrolky
I
Komponované kontrolky I I I I I
celá stránka lze převést na kontrolku odstranit elementy form, body, head, html změnit @Page na @Control změnit příponu na .ascx při použití code-behind dědit od UserControl
28 / 50
Úvod Dynamický web ASP.NET ASP.NET – třídy Web forms Kontrolky Validace kontrolek Stavy Bezpečnost Konec
Validace na straně serveru
I
Událost se provede teprve po odeslání stránky zpět na server
I
Možnost nastavit vlastnost AutoPostBack, odeslání na server se provede automaticky při změně textu
I
Po odeslání na server provést validaci a případné chyby odeslat zpět klientovi Vhodné pro složité kontroly
I
I
I
porovnání proti DB
Nevhodné pro jednoduché kontroly I
zbytečné zatížení spojení
29 / 50
Úvod Dynamický web ASP.NET ASP.NET – třídy Web forms Kontrolky Validace kontrolek Stavy Bezpečnost Konec
Validace na straně klienta
I
Použití validátorů I
I
I
I
I
RequiredFieldValidator I požaduje vyplněný text CompareValidator I porovnání vůči konstantě I Operace Equal, NotEqual, . . . RangeValidator I kontroluje rozsah vstupu RegularExpressionValidator I porovnává s regulárním výrazem CustomValidator I libovolná obsluha validace I vlasnost IsValid
30 / 50
Úvod Dynamický web ASP.NET ASP.NET – třídy Web forms Kontrolky Validace kontrolek Stavy Bezpečnost Konec
Validace na straně klienta
I
Vlastnosti validátorů I
I
I
I
ControlToValidate I nastavení vstupní kontrolky, která se má validovat ErrorMessage I zpráva, která se má zobrazit při chybě EnableClientScript I pokusit se o validaci na straně klienta
Funkce validátorů I
validace na straně klienta proběhne pouze v případě že I I
I
je nastaven EnableClientScript klient podporuje DHTML
v opačném případě probíhá validace na serveru
31 / 50
Úvod Dynamický web ASP.NET ASP.NET – třídy Web forms Kontrolky Validace kontrolek Stavy Bezpečnost Konec
Validace na straně klienta
I ValidationSummary I I I I
I
možnost zobrazit chyby z validátorů na jednom místě vše se nastavuje automaticky možnost zobrazit text nebo dialog u validátorů vhodné nastavit Text na * a umístit je k odpovídajícím kontrolkám zobrazení se provede až po stisku tlačítka, nemusí dojít k odeslání na server
32 / 50
Úvod Dynamický web ASP.NET ASP.NET – třídy Web forms Kontrolky Validace kontrolek Stavy Bezpečnost Konec
Stavy
I
Důležité pro dynamiku stránek
I
Umožňuje zásah uživatele do aplikace V ASP.NET následující kategorie stavů
I
I I I I
stav stav stav stav
aplikace (application state) relace (session state) zobrazení (view state) koláčků (cookie state)
33 / 50
Úvod Dynamický web ASP.NET ASP.NET – třídy Web forms Kontrolky Validace kontrolek Stavy Bezpečnost Konec
Stavy
I
Stav je informace, která přetrvává
I
Obvykle je informace složena z názvu (klíče) a hodnoty Např.
I
I I I
CenaZboží = 300 VybranáLokalita = ”České Budějovice” Login = ”Superuživatel”
34 / 50
Úvod Dynamický web ASP.NET ASP.NET – třídy Web forms Kontrolky Validace kontrolek Stavy Bezpečnost Konec
Stav aplikace
I
Týká se celé aplikace (všech stránek, které jsou součástí projektu)
I
Vytvoří se v okamžiku připojení prvního uživatele, přežívá dokud není služba zastavena či restartována Vhodné pro
I
I I I
malá data často používaná data stabilní data
35 / 50
Úvod Dynamický web ASP.NET ASP.NET – třídy Web forms Kontrolky Validace kontrolek Stavy Bezpečnost Konec
Stav aplikace
I
Možnost získat stav z HttpApplicationState Application
I
K jednotlivým položkám možno přistupovat pomocí stringového indexeru
I
Příklad this . Application [ " LibovolnyObjekt " ] = new LibovolnyObjekt ; LibovolnyObjekt o = ( LibovolnyObjekt ) this . Application [ " LibovolnyObjekt " ];
36 / 50
Úvod Dynamický web ASP.NET ASP.NET – třídy Web forms Kontrolky Validace kontrolek Stavy Bezpečnost Konec
Stav aplikace
I
Nutnost řešit přístupové konflikty (stav společný pro všechny uživatele)
I
Může způsobit nekonzistenci dat Možnost/nutnost uzamknout přístup k proměnným
I
I
I
Application.Lock() I čeká, dokud si neuzme aplikaci pro sebe Application.UnLock() I uvolní aplikaci pro další zájemce (nezapomenout zavolat!)
37 / 50
Úvod Dynamický web ASP.NET ASP.NET – třídy Web forms Kontrolky Validace kontrolek Stavy Bezpečnost Konec
Stav relace
I
Komunikace serveru s jedním uživatelem v jednom prohlížeči
I
ASP.NET řeší do velké míry automaticky Při zahájení relace se vygeneruje session ID, které se předává mezi serverem a klientem
I
I
jako cookies
I
jako část adresy
I
I
I
musí být povoleno v prohlížeči funguje jen pro relativní adresy http://localhost/Aplikace/ (es5kdprrks1m3l55yqyvqw45)/WebForm1.aspx Nutno nastavit v souboru web.config <sessionState cookieless="true">
38 / 50
Úvod Dynamický web ASP.NET ASP.NET – třídy Web forms Kontrolky Validace kontrolek Stavy Bezpečnost Konec
Stav relace
I I
Možnost získat z HttpSessionState Session Indexery I I
I
string int
Vlastnosti I
I
I
bool IsCookieless I jak se předává (cookie/adresa) bool IsNewSession I nová relace int Timeout (v minutách) I jak dlouho má být relace platná při neaktivitě
39 / 50
Úvod Dynamický web ASP.NET ASP.NET – třídy Web forms Kontrolky Validace kontrolek Stavy Bezpečnost Konec
Stav relace
I
Ne každá stránka potřebuje posílat relaci
I
Možnost nastavit přístup k relaci Atribut EnableSessionState direktivy Page
I
I
I
<\%@ Page EnableSessionState=... I True – čtení i zápis (výchozí hodnota) I Readonly – pouze čtení I False – nenačte se, nelze ani zapsat
Stav relace je možno ukládat i mimo proces serveru I I
State service SQL server
40 / 50
Úvod Dynamický web ASP.NET ASP.NET – třídy Web forms Kontrolky Validace kontrolek Stavy Bezpečnost Konec
Stav zobrazení
I
ViewState
I
Týká se jen po sobě jdoucích požadavků na tutéž stránku
I
Obsahuje stavové informace všech kontrolek na stránce
I
Realizováno jako skrytá položka formuláře name=" VIEWSTATE" value="dDwtMTM1...
41 / 50
Úvod Dynamický web ASP.NET ASP.NET – třídy Web forms Kontrolky Validace kontrolek Stavy Bezpečnost Konec
Koláčkový stav
I
Cookie state
I
Cookie je technika pro uchování stavu
I
Není standardizovaná Cookie (koláček)
I
I
dvojice název, hodnota
I
Přenáší se s každým požadavkem
I
Je možné koláčky přidávat
I
Chová se podobně jako session state
42 / 50
Úvod Dynamický web ASP.NET ASP.NET – třídy Web forms Kontrolky Validace kontrolek Stavy Bezpečnost Konec
Koláčkový stav
I I
Možnost získat HttpCookieCollection Request.Cookies Indexery I I
int string
I
Ukládá jen stringy!
I
Příklad string s = Request.Cookies["barva"].Value;
43 / 50
Úvod Dynamický web ASP.NET ASP.NET – třídy Web forms Kontrolky Validace kontrolek Stavy Bezpečnost Konec
Koláčkový stav
I
Přidání koláčku I
třída HttpCookie I I I
I
string Name string Value DateTime Expires
Přidání do kolekce I
Response.Cookies
44 / 50
Úvod Dynamický web ASP.NET ASP.NET – třídy Web forms Kontrolky Validace kontrolek Stavy Bezpečnost Konec
Bezpečnost
I I
Uživatel by se měl přesvědčit o identitě serveru Server by se měl přesvědčit o identitě uživatele I
zkontrolovat identitu uživatelů
I
přidělit uživatelům práva
I
I
Authentication Authorization
45 / 50
Úvod Dynamický web ASP.NET ASP.NET – třídy Web forms Kontrolky Validace kontrolek Stavy Bezpečnost Konec
Bezpečnost
I I
Správce webu autorizuje uživatele Uživatelé se autentikují I
vytvoří se autentikační koláček okolnosti vytvoření určuje autor webu
I
hodnota koláčku by neměla být triviální
I
I
I
většinou na základě jména a hesla šifrování
46 / 50
Úvod Dynamický web ASP.NET ASP.NET – třídy Web forms Kontrolky Validace kontrolek Stavy Bezpečnost Konec
Konfigurace
< authentication mode = " Forms " > < forms loginUrl = " login . aspx " > < credentials passwordFormat = " Clear " > < user name = " admin " password = " adminovoheslo " / > credentials > forms > authentication > < authorization > < allow users = " admin " / > < deny users = " * " / > authorization >
47 / 50
Úvod Dynamický web ASP.NET ASP.NET – třídy Web forms Kontrolky Validace kontrolek Stavy Bezpečnost Konec
Třída FormsAuthentication
I HttpCookie GetAuthCookie(string, bool) I
chci ověřit uživatele, ověření má přetrvat i po ukončení prohlížeče
I void RedirectFromLoginPage(string, bool) I
uživatel byl úspěšně ověřen, ověření ma přetrvat
I void SignOut() I
odhlášení uživatele
I string HashPasswordForStoringInConfigFile(string,string) I I
vytvoří hashované heslo metody MD5, SHA1
48 / 50
Úvod Dynamický web ASP.NET ASP.NET – třídy Web forms Kontrolky Validace kontrolek Stavy Bezpečnost Konec
Příklad < html > < script language = " C # " runat = " server " > void Login_Click ( Object sender , EventArgs e ) { if ( Form s Aut he nti cat i o n . Authenticate ( username . Text , password . Text )) Forms Aut he nti ca ti o n . R e d i r e c t F r o m L o g i n P a ge ( username . Text , false ); } script > < body > < form runat = " server " > Jméno : < asp : textbox id = username runat = " Server " / > < br / > Heslo : < asp : textbox id = password textmode = Password runat = " Server " / > < br / > < asp : button id = button onclick = " Login_Click " text = " Login " runat = " Server " / > form > body > html > 49 / 50
Úvod Dynamický web ASP.NET ASP.NET – třídy Web forms Kontrolky Validace kontrolek Stavy Bezpečnost Konec
Konec
50 / 50