| 
              
         
            
            
              
                |  |  
                | Az
                ASP objektummodell |  
                | 
                    
                    
                      
                        | Az .asp oldalak
                          programozását, a HTTP kommunikáció, a webkiszolgáló
                          egyes szolgáltatásainak elérését külön
                          objektummodell segíti. Az ASP objektummodelljének
                          minden elemét elérhetjük az .asp oldalak kódjaiból. Az ASP
                          objektummodell és annak elemei: Az ASP
                          objektummodellje 
 Ha a tranzakciós műveletekhez
                          használt ObjectContext objektumot nem számítjuk, az
                          objektummodell hat (Windows NT 4.0-n öt) objektumból
                          áll. A Windows 2000-ben megjelent új objektum az
                          ASPError, ami egy bekövetkezett hiba leírását
                          tartalmazza, az .asp-be ágyazott, saját hibakezelést
                          segíti. A Server
                          objektum magát az IIS-t képviseli, néhány
                          kiszolgálószintű beállítással és szolgáltatással. Az Application
                          objektum egy webalkalmazást jelképez. A
                          webalkalmazás különálló egység, általában egy
                          könyvtárban és annak alkönyvtáraiban található
                          .asp kódok összessége, közös objektumokkal és beállításokkal. A Session
                          objektum egy ügyfél és a kiszolgáló között
                          “fennálló“ kapcsolatot, munkamenetet jelképez.
                          A “fennálló“ kapcsolatot azért írtuk így,
                          mert valójában nem egy kapcsolatról van szó. Az
                          IIS (a háttérben cookie-k segítségével) azonosítja
                          a felhasználót és a böngészőt, így az a böngésző
                          bezárásáig saját munkamenetébe térhet vissza. A Request
                          objektum egy HTTP kérést jelképez, segítségével
                          kódból hozzáférhetünk a kérés minden eleméhez,
                          legyen az HTTP fejléc értéke, a böngészőben tárolt
                          cookie, vagy kérdőív tartama. A Response
                          objektum pedig értelemszerűen a kérdésre küldendő
                          választ jelképezi. Természetesen a Response
                          objektum segítségével sem csak a válasz tartalmát,
                          hanem a HTTP protokoll fejrészét is kezelhetjük. Egy IIS kiszolgálón
                          belül Server és ASPError objektumból
                          egy-egy létezik (utóbbi csak akkor érhető el,
                          ha hiba történt). Application objektum
                          minden webalkalmazás egyedi, globális objektuma, Session
                          objektum minden munkamenethez (ügyfélhez) egy
                          jön létre, egyidejűleg tehát több is létezhet. Request
                          és Response objektum pedig mindig az adott kérésre
                          és válaszra vonatkozik, újabb kérés esetén új példány
                          jön létre belőlük is. A Server objektum
                          egy és oszthatatlan, és főleg kényelmi szolgáltatásai
                          miatt hasznos. Például ha ezt akarjuk a kiírni a
                          felhasználó böngészőjébe: Vízszintes
                    vonal: <HR> Ha ezt elküldjük a
                          böngészőbe, megjelenik a felirat, majd maga a vízszintes
                          vonal, hiszen a böngésző értelmezi a kódban található
                          HTML tagot. Ha a HTML elemet magát szeretnénk
                          megjeleníteni, a <
                          jelet < a >-t pedig >
                          entity-vel kell helyettesítenünk, tehát
                          valahogy így: Vízszintes
                    vonal: <HR> Ezen kívül még
                          sok más elemet is kódolni kell, nem beszélve a
                          speciális karakterekről. Szerencsére itt van a Server.HTMLEncode()
                          metódus, ami elvégzi
                          ezt a kódolást: Response.Write(
                    Server.HTMLEncode("Vízszintes vonal: <HR>")
                    ) A HTMLEncode()
                          azért is nagyon fontos, mert okos használatával
                          elkerülhetjük az úgynevezett Cross Site Scripting
                          hibát. Ezt a fontos biztonsági hibát az okozza,
                          hogy egyes weboldalak (akár hibaüzenet formájában
                          is) válogatás nélkül, és kódolatlanul
                          visszaküldenek bizonyos, részükre előzőleg átadott
                          szövegrészeket. A másik hasznos kódoló
                          metódus a Server.URLEncode(). Az URL-ekben nem
                          szerepelhet akármilyen karakter. Ami nem megszokott,
                          azt kódolni kell, általában %xx formában,
                          ahol xx a karakter hexadecimális kódja. (Még a
                          szóközt is helyettesítik, + jellel). Ha
                          URL-eket “építünk“ fel az ASP oldalainkban,
                          mindig használjuk ezt a metódust is A Server.MapPath()
                          nagyon gyakran használt metódus. Arra való, hogy a
                          virtuális könyvtár- és fájlneveket (pl.
                          http://localhost/asp/default.asp) valós fájlnevekké
                          alakítsa (pl. C:\inetpub\wwwroot\asp\default.asp).
                          Ha a MapPath()-nek átadott virtuális név
                          “/“ vagy “\“ karakterrel kezdődik, akkor a
                          virtuális gyökérkönyvtártól, ellenkező esetben
                          pedig a hívás helyétől relatív fájlnevekkel
                          dolgozik (nem
                          lesz ugyanaz az eredménye tehát a “default.asp“
                          és a “/default.asp“ kódolásának, kivéve ha éppen
                          a gyökérkönyvtárban “állunk“).
                          Természetesen használhatók a “.“ és “..“
                          karakterek, azaz mozoghatunk a virtuális könyvtárak
                          által alkotott térben (a
                          “.“ az aktuális, a “..“ pedig a virtuális szülőkönyvtárra
                          mutat). A Server.ScriptTimeOut
                          beállításával a scriptek időtúllépésének határát
                          növelhetjük meg (ez az érték nem lehet
                          alacsonyabb, mint a tulajdonságlapokon beállított
                          alapértelmezés), illetve kérdezhetjük le. A Server.Transfer()
                          és a Server.Execute() két, az IIS5-ben új
                          szolgáltatás. A Server.Transfer()
                          metódus egyszerűen átadja a vezérlést az alkalmazásban
                          található másik .asp kódnak. Minden átvett
                          adat megmarad, többek között a Request objektum
                          teljes tartalma is. A Server.Transfer(), amely
                          átadja a vezérlést a megadott oldalnak, kiválthatja
                          a Response Redirect() használatát, mert ehhez
                          nincs szükség a böngésző közreműködésére (és
                          így felesleges hálózati forgalomra). Természetesen
                          ez a megoldás csak akkor működik, ha webkiszolgálón
                          belül szeretnénk átirányítani a felhasználót. A Server.Execute()
                          szubrutinszerűen végrehajtja az adott oldalt, majd a
                          végrehajtás befejezésre után visszatér az
                          eredetihez (mintha csak beszúrtuk volna a kódot).
                          Ennek előnye az <!--
                          include -->
                          kitétellel szemben az, hogy itt akár dinamikusan is
                          generálhatjuk a futtatandó oldal nevét. Példa:<%Server.Execute(”fejlec.htm”)%>
 
 A Server.GetLastError()
                          visszaadja az utolsó ASP hibának adatait
                          tartalmazó ASPError objektum-ot. A Server.CreateObject()
                          metódus létrehoz egy adott objektumot. Ha a létrehozott
                          objektum tartalmaz OnStartPage metódust, azt is meghívja.
                          Az objektum addig marad életben, amíg azt nem töröljük,
                          illetve az ASP oldal végrehajtása véget nem ér. Ha
                          az objektumot a Session vagy Application objektumba töltöttük,
                          akkor az objektum élete csak az adott Session vagy
                          Application objektum megszűnésekor ér véget. Egy ASP alkalmazás
                          tulajdonképpen nem más, mint egy adott könyvtárban
                          és az összes alkönyvtárában található .asp
                          kódok halmaza. Azonban a valóságban ennél kicsit
                          bonyolultabb a helyzet, hiszen ha csak erről lenne szó,
                          nem lett volna szükség az alkalmazások létrehozására.Az Application objektum segítségével a
                          felhasználók, kérések között adatokat oszthatunk
                          meg egyszerűen, anélkül, hogy például lemezre
                          kellene írnunk azokat. Az Application
                          objektumba írt információ mindaddig megmarad, amíg
                          az adott alkalmazást (gyakorlatilag az IIS-t) újra
                          nem indítjuk. Az ASP alkalmazás egy nagy globális
                          objektum a felhasználók kérései és az azokra
                          adott válaszok fölött.
 
                      
                        | Az ASP munkamenet
                          – a Session objektum | 
 |  Az ASP munkamenet (Session)
                          célja teljesen hasonló, csakhogy az Application-nel
                          ellentétben nem felhasználók közötti, hanem egy
                          adott felhasználó műveletei fölötti globális
                          objektum. Azaz, számos Request
                          és Response fölött uralkodó objektum, ami
                          megmarad egészen addig, amíg a felhasználó el nem
                          hagyja a webhelyet, vagy be nem csukja a böngészőjét.
                          Természetesen Session
                          objektumból már nem csak egy van: ahány felhasználó,
                          annyi Session.Az egyes munkamenetek azonosítása cookie-k segítségével
                          történik. Az (egyébként változó) ASPSESSIONIDxxxxxxxx
                          nevű cookie tartalmának segítségével az IIS egyértelműen
                          azonosítja a visszatérő böngészőt, és ugyanabba
                          a környezetbe helyezi (azaz,
                          mindenki az első látogatáskor részére létrehozott,
                          különbejáratú Session objektumba kerül).
 Elbúcsúzhatunk a munkamenetektől, ha a felhasználó
                          böngészője visszautasítja a cookie-kat. Ha
                          ilyenkor mégis valami hasonló funkcionalitást
                          szeretnénk elérni, külső gyártó termékeit kell
                          használnunk, amelyek az URL-be ágyazva valósítják
                          meg a munkamenetek kezelését (az IIS-ben szűrő- ként
                          működve minden, az oldalakban található URL
                          hivatkozáshoz hozzáfűzik az azonosítót, míg a böngészőktől
                          érkező kérésekből kiszűrik azokat). Ez a megoldás
                          teljesen cookie-mentes, és elvileg minden böngésző
                          boldogul vele (csak
                          kicsit rondák lesznek az URL-ek).
     |  |  |