Programování v jazyku C# II. 8.kapitola
Obsah Kontrolky Validace Stavy Bezpečnost 2/27
Web formuláře Kontrolky na formuláři označené atributem runat="server" HTML kontrolky těsně kopírují rozhraní dané HTML specifikací příklad <input type ="text" runat ="server"></ input> Web kontrolky unifikované rozhraní pro práci s web formuláři příklad <asp:textbox runat ="server"></asp:textbox> 3/27
Uživatelské kontrolky Jednoduchá kontrolka 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" %> 4/27
Uživatelské kontrolky Komponované kontrolky 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 CustomValidator libovolná obsluha validace vlasnost IsValid 7/27
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"> <foms loginurl ="login.aspx"> <credentials passwordformat ="Clear"> <user name ="uzivatel" password =""/> <user name ="admin" password ="adminovoheslo"/> </credentials> </forms> </authentication> <authorization> <allow users ="admin"/> <deny users ="*"/> </authorization> 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 25/27
Příklad <html> <script language ="C#" runat ="server"> void Login_Click(Object sender,eventargs e) { if(formsauthentication.authenticate(username.text, password.text)) FormsAuthentication.RedirectFromLoginPage(username.Text,fals } </ script> <body> <form runat ="server"> Jméno: <asp:textbox id=username runat ="Server"/><br /> Heslo: <asp:textbox id=password textmode =Password runat ="Server <asp:button id=button onclick ="Login_Click" text ="Login" runat= </form> </body> </html> 26/27
Konec 27/27