|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Що передається
клієнтові?
Сценарії ASP .NET програмуються в звичайному
стилі VB .NET, проте залежно
від типу клієнтського
броузера генерується різний код HTML. Наприклад,
якщо клієнт працює в останній
версії Internet Explorer, в
коді, що згенерував, використовуються
конструкції DHTML,
а інтервальна перевірка здійснюється
на стороні клієнта. Але якщо
як броузера використовується стільниковий
телефон з підтримкою WAP (Wireless
Application Protocol), згенерує код WML (версія
HTML для цієї платформи), а
всі необхідні перевірки
виконуватимуться сервером. І все це
відбувається автоматично,
абсолютно не вимагаючи особливих
дій з боку програміста![ Якщо,
звичайно, ви не займетеся
розробкою нестандартних
елементів для форм Web — в цьому
випадку вам доведеться неабияк
потрудитися. Елементи форм ^Veb
повинні знати, який код слід
генерувати для кожної конкретної
платформи. ] Нижче приведений код попереднього
прикладу, що згенерував
для клієнтського броузера
Internet Explorer, що працює в
Windows XP. Ключові рядки виділені
жирним шрифтом: <!DOCTYPE HTML
PUBLIC "-//w3c//dtd HTML 4.0 Transitional//en">
<HTML> <HEAO> <title></title> <meta name="generator"content="microsoft
Visual Studio.NET 7.0"> <meta name="code_language"content="visual
Basic 7.0"> <meta name="vs_defaultclientscnpt"content="javascnpt"> <meta
name="vs_targetschema" content="http://schemas.microsoft.com/intel1isense/ie5"> </head> <body
Ms_positioning="gridlayout"> <form name="forml"
method="post" action="webforml.aspx" id="forml"> <input type="hidden"
name="_viewstate" value="ddwxmda3mze2mzey0zs+"/> <input type="subm1t"
name="buttonl" value="click me!" id="buttonl" style="height:67px;width:123px;Z-INDEX:
101: LEFT :311px: Position:absolute;TOP:212px"/> <span id="labell"style="height:132px:width:631px:z-index:102: Left:15px;POSITION:absolute:TOP:40px"></span> </form> </body> </html> З виділеного
фрагмента видно, що в
HTML-код, що згенерував
для клієнтської сторони, включена форма HTML
з атрибутом post і прихованим полем
_viewstate. Ці рядки дозволяють ASP
.NET зберігати інформацію стану,
не вимагаючи спеціальних дій
з боку клієнта. Приховане поле
_viewstate містить зашифровані дані,
по яких ASP .NET може
відновити сторінку і її стан.
Механізм шифрування є
особливим різновидом серіалізациі;
щоб відключити збереження
стану, задайте властивості Епаиє-viewstate
значення False.
Щоб краще зрозуміти, як
відбувається збереження стану, натисніть кнопку
і знову проглянете початковий текст.
Цього разу ключові рядки HTML-кода
виглядатимуть приблизно так: <form name="forml"
method="post" action="webforml.aspx" id="forml"> <input type="hidden" name="_viewstate" value="ddwxmda3mze2mzey03q802w8atwxpjs+ 02w8ddw7bdxppdm+oz47bdxopha 8cDxsPEZvbnRfU216ZTtUZXh0018hUOI7PjtsPFN5 c3rlbs5xzwiuvukuv2vi029udhjvbh Murm9udfvuaxqsifn5c3rlbs5xzwisifzlcnnpb 249ms4wljiomteumcwgq3vsdhvyzt luzxvocmfslcbqdwjsawnlzxlub2tlbjlimdnmn Wy3zjexzduwytnhpfgtt6fyz2u+0 ldlbgnvbwugdg8gqvnqlk5fvcbaoc8xos8ymdax Ideyojm20jawifbn02k8mtqwot 47pj47pjs7pjs+pjs+pjs+"/> Хоча базовий файл
.aspx, вказаний в атрибуті тега <form>,
залишився тим самим, прихована
змінна _viewstate змінилася вельми
грунтовно. Фактично в цьому
полі збережений повний стан
елементів HTML і даних форми. Одна з
переваг цього підходу
полягає в тому, що програміст
позбавляється від клопоту із
збереженням стану. Він просто
задає властивості Enableviewstate значення
True і переходить до програмування
логіки сторінки. З іншого боку, з
кожною сторінкою доводиться
пересилати додаткові дані.
В більшості випадків їх об'єм
відносно невеликий, тому
переваги компенсують
недоліки.
Нарешті, у кожної
сторінки .aspx є властивість
Sessi on, що повертає об'єкт
з інформацією про поточну сторінку.
Об'єкт Session можна розглядати як
свого роду «cynepcookie» з можливістю
збереження даних по ключу (як в
хэш-таблицах). Приклад: Session("user
name") = Textbox1.Text Вміст
текстового поля Textboxl зберігається в
об'єкті Session, а при зверненнях до -нему
використовується рядок "user name".
У ранніх версіях
Windows конфігураційні дані
зберігалися в ini-файлах, на зміну
яким прийшов глобальний реєстр.
У ASP .NET додатки фактично
повертаються до часів текстових
ini-файлов — конфігураційні
дані зберігаються в текстовому
файлі Web.config, що знаходиться
в каталозі додатку. Цей файл
визначає умови виконання
додатків ASP .NET — такі як
параметри відладки і системи
безпеки. Конфігураційні
файли мають досить складну
структуру. Нижче приведений
вміст файлу Web.config для
попереднього прикладу: 1 <?xml version-"1.0"
encoding="utf-8"?> 2
<configuration> 3 <system.web> 4 <!--DYNAMIC
DEBUG COMPILATION 5 Set compilation
debug="true" to insert debugging symbols (.pdb 6 information)into
the compiled page.Because this creates а larger file 7 that
executes more slowly,you should set this value to true only when 8 debugging.and to
false at all other times.For more information,refer 9 to the
documentation about debugging ASP .NET files. 10 --> 11 compilation
defaultl_anguage="vb" debug="true"/> 12 <!--CUSTOM
ERROR MESSAGES 13 Set
customerrors mode="0n" or "Remoteonly" to enable custom error 14 messages. "Off"to
disable.Add <error> tags for each of the errors 15 you want to
handle. 16 --> 17 <customerrors
mode="remoteonly"/> 18 <!--AUTHENTICATION 19 This section sets
the authentication policies of the application. 20 Possible modes
are "Windows". "Forms". "Passport"
and "None" 21 --> 22
<authentication mode="windows"/> 23 <!--AUTHORIZATION 24 This section sets
the authorization policies of the application.You can 25 allow or deny
access to application resources by user or role. 26 Wildcards:
"*" mean everyone "?" means anonymous (unauthenticated) 27 users. 28 --> 29
<authorization> 30 <allow users-
"*" /><!-- Allow all users --> 31 <!--<allow
users="[comma separated list of users]" 32 roles="[comma
separated list of roles]"/> 33 <Deny users="[comma
separated list of users ]" 34 roles="[comma
separated list of roles]"/> 35 --> 36 </authorization> 37 <!--APPLICATION-LEVEL
TRACE LOGGING 38
Application»level tracing enables trace log output for every page
within 39 an application.Set
trace enabled= "true"to enable application trace 40 logging.If
pageoutput- "true",the trace information will be
displayed at 41 the bottom of
each page.Otherwise,you can view the application trace 42 log by browsing
the "trace.axd"page from your Web application root. 43 --> 44 <trace enabled-
"false" requestlimit = "10" 45
pageoutput = "false" tracemode = "Sortbytime" 46 localonly- "true"
/> 47 (--SESSION STATE
SETTINGS 48 By default ASP .NET
uses cookies to identify which requests belong to а 49 particular
session.If cookies are not available.a session can be 50 tracked by adding
а session identifier session.To disable cookies.set 51
sessionstate cookieless = "true"' 52 --> 53 <sessionstate 54
mode="inproc" 55
stateconnectionstring - "tcpip=127.0.0.1:42424" 56
sqlconnectionsthng = "data source= 127.0.0.1:userid=sa:password=" 57
cookieless="false" 58
timeout="20" 59 /> 60 <!--PREVENT
SOURCE CODE DOWNLOAD 61 This section sets
the types of files that will not be downloaded.As 62 well as entering
а httphandler for а file type.you must also * 63 associate that
file type with the xspisapi.dll in the App Mappings 64 property of the
Web site.or the file can be downloaded.lt is 65
recommended that you use this section to prevent your sources
from 66 being downloaded. 67 --> 68
<httphandlers> 69
<add verb=
"*" path= "*.vb" 70 type= "System.Web.HttpNotFoundHandler.System.Web"/> 71 <Add verb="*"
path = "*.cs" 72 type= "System.Web.HttpNotFoundHandler.System.Web"/> 73 <Add verb="*"
path="*.vbproj" 74 type= "System.Web.HttpNotFoundHandler.System.Web"/> 75 <Add verb="*"
path="*.csproj" 76 type= "System.Web.HttpNotFoundHandler.System.Web"/> 77 <Add verb="*"
path-"*.webinfo" 78 type= "System.Web.HttpNotFoundHandler.System.Web"/> 79 </httphandlers> 80 <!--GLOBALIZATION 81 This section sets
the globalization settings of the application. 82 --> 83 <globalization
requestencoding= "utf-8" responseencoding="utf-8"/> 84 </system.web> 85 </configuration> З рядка 1
видно, що сторінки ASP .NET, як і
багато об'єктів .NET, будуються на базі
XML. У рядках 2-11 міститься частина
конфігураційного файлу, яка
управляє налаштуваннями компіляції і
визначає режим використання
сторінки, — тестування/розробка
або нормальна робота. У цій частині
файлу також указуються мови,
використані в сторінці (як
видно з рядка І, в приведеному
прикладі це VB).
Наступний розділ
відноситься до перевірки привілеїв
користувача (рядки 18-36). У
приведеному лістингу параметрам аутентифікації
привласнено значення «*»; це
означає, що робота з додатком
дозволена будь-якому користувачеві.
Як видно з коментарів,
що автоматично
згенерували, до цього розділу, ви
також можете вирішити або
заборонити доступ до додатку за
допомогою ключових слів allow і deny. Хороша схема
аутентифікації займає важливе
місце в програмуванні
розподілених застосувань. Яким
чином сторінка дізнається, ким
є її користувач? У ASP .NET
підтримуються три різновиди
схем аутентифікації, перераховані
в таблиці. 12.1. Таблиця 12.1. Схеми
аутентифікації в ASP .NET
Пам'ятаєте, що при
будь-якій схемі аутентифікації HTTP
залишається текстовим протоколом,
тому інформація передається
клієнтові в незашифрованому вигляді і
може бути викрадена методом
перехоплення пакетів (packet sniffing). Для
боротьби з перехопленням використовується
транспортний механізм SSL (Secure Socket
Layer).
Рядки 47-59 управляють станом
сеансу. В більшості випадків
використовуються стандартні механізми
ASP .NET, що володіють
достатньо могутніми можливостями.
Починаючи з рядка 60 і
до кінця файлу реалізується одна забавна
можливість ASP .NET, що
представляє особливий інтерес для
тих, хто хоче захистити свою
інтелектуальну власність. У
цьому розділі приводиться список
типів файлів, які не повинні
прийматися клієнтом з сервера.
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||