1 Programování v jazyku C# II. 8.kapitola2 Obsah Kontrolky Validace Stavy Bezpečnost 2/273 Web formuláře Kontrolky na formuláři označené atributem run...
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
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
5/27
Validace na straně serveru • • • •
Událost se provede teprve po odeslání stránky zpět na server Možnost nastavit vlastnost AutoPostBack, odeslání na server se provede automaticky při změně textu Po odeslání na server provést validaci a případné chyby odeslat zpět klientovi Vhodné pro složité kontroly – porovnání proti DB
•
Nevhodné pro jednoduché kontroly – zbytečné zatížení spojení
6/27
Validace na straně klienta • Použití validátoru – RequiredFieldValidator • požaduje vyplněný text
– CompareValidator • porovnání vůči konstantě • Operace Equal, NotEqual,...
– RangeValidator • kontroluje rozsah vstupu
– RegularExpressionValidator • porovnává s regulárním výrazem
Validace na straně klienta • Vlastnosti validátoru – ControlToValidate • nastavení vstupní kontrolky, která se má validovat
– ErrorMessage • zpráva, která se má zobrazit při chybě
– EnableClientScript • pokusit se o validaci na straně klienta
• Funkce validátoru – validace na straně klienta proběhne pouze v případě že • je nastaven EnableClientScript • klient podporuje DHTML
– v opačném případě probíhá validace na serveru
8/27
Validace na straně klienta • ValidationSummary – – – –
možnost zobrazit chyby z validátoru na jednom místě vše se nastavuje automaticky možnost zobrazit text nebo dialog u validátoru 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
9/27
Stavy • Důležité pro dynamiku stránek • Umožňuje zásah uživatele do aplikace • V ASP.NET následující kategorie stavu – – – –
stav aplikace (application state) stav relace (session state) stav zobrazení (view state) stav kolácku (cookie state)
10/27
Stavy • Stav je informace, která přetrvává • Obvykle je informace složena z názvu (klíče) a hodnoty • Např. – CenaZboží = 300 – VybranáLokalita = ”České Budějovice” – Login = ”Superuživatel”
11/27
Stav aplikace • Týká se celé aplikace (všech stránek, které jsou součástí projektu) • Vytvoří se v okamžiku připojení prvního uživatele, přežívá dokud není služba zastavena či restartována • Vhodné pro – malá data – často používaná data – stabilní data
12/27
Stav aplikace • Možnost získat stav z HttpApplicationState Application • K jednotlivým položkám možno přistupovat pomocí stringového indexeru • Příklad this.Application["LibovolnyObjekt"] = new LibovolnyObjekt; LibovolnyObjekt o =(LibovolnyObjekt) this.Application["LibovolnyObjekt"];
13/27
Stav aplikace • Nutnost řešit přístupové konflikty (stav společný pro všechny uživatele) • Muže způsobit nekonzistenci dat • Možnost/nutnost uzamknout přístup k proměnným – Application.Lock() • čeká, dokud si neuzme aplikaci pro sebe
– Application.UnLock() • uvolní aplikaci pro další zájemce (nezapomenout zavolat!)
14/27
Stav relace • Komunikace serveru s jedním uživatelem v jednom prohlížeč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 – jako cookies • musí být povoleno v prohlížeči
– jako část adresy • funguje jen pro relativní adresy • http://localhost/Aplikace/ (es5kdprrks1m3l55yqyvqw45)/WebForm1.aspx • Nutno nastavit v souboru web.config <sessionState cookieless="true">
15/27
Stav relace • Možnost získat z HttpSessionState Session • Indexery – string – int
• Vlastnosti – bool IsCookieless • jak se předává (cookie/adresa)
– bool IsNewSession • nová relace
– int Timeout (v minutách) • jak dlouho má být relace platná při neaktivitě
16/27
Stav relace • Ne každá stránka potřebuje posílat relaci • Možnost nastavit přístup k relaci • Atribut EnableSessionState direktivy Page – <\%@ Page EnableSessionState=... • True – čení i zápis (výchozí hodnota) • Readonly – pouze čtení • False – nenačte se, nelze ani zapsat
• Stav relace je možno ukládat i mimo proces serveru – State service – SQL server
17/27
Stav zobrzazení • ViewState • Týká se jen po sobě jdoucích požadavků na tutéž stránku • Obsahuje stavové informace všech kontrolek na stránce • Realizováno jako skrytá položka formuláře name=„__VIEWSTATE" value="dDwtMTM1...
18/27
Koláčkový stav • • • •
Cookie state Cookie je technika pro uchování stavu Není standardizovaná Cookie (koláček) – dvojice název, hodnota
• Přenáší se s každým požadavkem • Je možné koláčky přidávat • Chová se podobně jako session state
19/27
Koláčkový stav • Možnost získat HttpCookieCollection Request.Cookies • Indexery – int – string
• Ukládá jen stringy! • Příklad string s = Request.Cookies["barva"].Value;
20/27
Koláčkový stav • Přidání koláčku – třída HttpCookie • string Name • string Value • DateTime Expires
• Přidání do kolekce – Response.Cookies
21/27
Bezpečnost • Uživatel by se mel přesvědčit o identitě serveru • Server by se měl přesvědčit o identitě uživatele – zkontrolovat identitu uživatelů • Authentication
– přidělit uživatelům práva • Authorization
22/27
Bezpečnost • Správce webu autorizuje uživatele • Uživatelé se autentikují – vytvoří se autentikační koláček – okolnosti vytvoření určuje autor webu • většinou na základě jména a hesla
– hodnota koláčku by neměla být triviální • šifrování
23/27
Konfigurace < authentication mode ="Forms"> <user name ="uzivatel" password =""/> <user name ="admin" password ="adminovoheslo"/> <deny users ="*"/> 24/27
Třída FormsAuthentication • HttpCookie GetAuthCookie(string, bool) – chci ověřit uživatele, ověření má přetrvat i po ukončení prohlížeče • void RedirectFromLoginPage(string, bool) – uživatel byl úspešně ověřen, ověření má přetrvat • void SignOut() – odhlášení uživatele • string HashPasswordForStoringInConfigFile(string,string) – vytvoří hashované heslo – metody MD5, SHA1