Четверг, 25.04.2024, 00:04
Приветствую Вас Гость | RSS

Лекции

Меню сайта
Форма входа
Категории раздела
ТАУ (Теория автоматического управления) [31]
лекции по ТАУ
Экология [151]
учебник
Бухгалтерский учет и налогообложение в строительстве [56]
Дементьев А.Ю. - Практическое пособие
Психология [104]
Пип
информатика [80]
с# Карли Ватсон
современные стулья [0]
новинки
Поиск

Главная » 2010 » Февраль » 11 » Создание подписной формы для пользователя
01:01
Создание подписной формы для пользователя
Создание подписной формы для пользователя
Все страницы, предназначенные для управления списками рассылки и подпис-
чиками, отправки сообщений по электронной почте изменения внешнего представ-
ления, завершены. Осталось создать подписную форму, которая позволит
конечному пользователю подписаться на некоторый список.
Вместо создания одной подписной формы,
создадим страницу ASP.NET (см. рис. слева),
которая будет автоматически генерировать
HTML-форму для заданного списка рассылки.
Администратор сначала выбирает список
рассылки, для которого он собирается созда-
вать подписную форму, потом определяет не-
обходимость наличия полей для первого
и последнего имени (эти поля при подписке
не являются обязательными, поэтому форма
вполне может без них обойтись). Создавае-
мая форма будет иметь две кнопки, которые
реализуют две возможности пользователя —
подписаться и отказаться от подписки. При
нажатии кнопки Create генерируется HTML-
код, который помещается в расположенное
в нижней части страницы текстовое окно,
а сама форма выводится в центре страницы
для предварительного просмотра. В этот мо-
мент у администратора есть возможность
скопировать сгенерированный HTML и пере-
нести его в произвольную страницу.
• - . ' • ' . .
Практический пример 2 — Менеджер рассылки новостей в режиме онлайн 837
Страница FormWizard.aspx
Первая часть страницы, в которой находятся раскрывающийся список и тексто-
вые окна, строится как обычно, с выравниванием всех управляющих элементов
при помощи таблицы. Вторая часть таблицы, которая располагается на приведен-
ном выше рисунке за надписью "Result Form:"(полученная форма), по умолчанию
является невидимой и выводится, только когда пользователь нажимает кнопку
Create. Поскольку код этой страницы почти целиком состоит из управляющих эле-
ментов ASP.NET, с аналогами которых мы уже встречались ранее, этот код здесь
не приводится.
Код поддержки для страницы FormWizard.aspx
Код поддержки для этой страницы производит обращение к базе данных для
заполнения раскрывающегося списка имеющимися в наличии списками рассылки,
а также извлекает URL страницы Subscribers.aspx из таблицы settings. Осталь-
ная часть программы занимается созданием HTML-текста для формы с учетом
выбранных опций. Обработчик событий create_ciick() создает HTML-строку,
содержимое которой определяется в зависимости от опций, выбранных админист-
ратором в верхней части формы. Поскольку в этом коде не содержится чего-либо
нового или интересного, мы этот код воспроизводить не будем.
HTML-КОД, СОЗДанНЫЙ Обработчиком событий Create_Click() , ВЫВОДИТСЯ
в управляющем элементе Label с именем ResuitForm, что позволяет пользователю
осуществлять предварительный просмотр результатов своей работы. Получаемый
HTML не является законченным, поскольку в качестве корне-
вого элемента в нем присутствует тег <form>, но при необхо-
димости его можно легко скопировать из текстового окна
в отдельный файл.
На рисунке слева можно увидеть некоторые тестовые фор-
мы, сгенерированные с использованием данной страницы.
Первая из представленных выше форм, была создана без ис-
пользования всех трех возможных опций, вторая — с исполь-
зованием двух первых опций (запрос первого и последнего
имени), а третья форма создавалась с использованием всех
трех имеющихся возможностей.
Совершенно очевидно, что, поскольку создаваемый код
представляет собой обычный HTML, есть возможность видо-
изменять получаемый результат по своему усмотрению: на-
пример, изменить цвет, шрифт, ширину текстовых окон,
использовать определенный рисунок для границ или фона или
вывести комментарии, позволяющие пользователю получить
дополнительную информацию относительно списка, на кото-
рый он подписывается. Очень полезным представляется ис-
пользование функции на JavaScript, которая позволяет перед
фактической отправкой формы убедиться в том, что поле, со-
держащее адрес электронной почты, не является пустым.
Подписка на список рассылки
До этого момента мы смотрели на приложение с точки зрения администратора,
а как быть с конечным пользователем? Посетитель зашел на наш web-сайт и ре-
шил подписаться на какой-либо список рассылки, но каким образом он может это
: . Pi* Zi\ V«w Fev«£e» Tcr« н?'р
i
^ «.
Subfnjt j
MufCQ ^ . Д
J
838 Практический пример
осуществить? Именно это мы сейчас и продемонстрируем. Страница с подписной
формой может находится где угодно, даже на другом сервере, поскольку она ука-
зывает на ПОЛНЫЙ URL Страницы Subscribe.aspx.
Настала пора протестировать одну из подписных форм, представленных на
странице, которая изображена на предшествующем рисунке и которая позволяет
регистрировать новых подписчиков. Мы будем заполнять третью из форм, пока-
занных на рисунке. Если на странице администратора выбрана установка Send
Subscription Email (отправить сообщение о подписке), что происходит по умолча-
нию, если вы используете включенный в состав программного обеспечения файл
с установками, то подписчик получит по электронной почте сообщение с подтвер-
ждением, содержащее информацию, заданную им самим:
& Welcome to the тсЖпг* list €#
ь
Reply . Reply All Forward Юг* Delete Previous
from: NewsMallcr Team
Date: Sunday, ЛиЕу 15, 2001 7:52 PM
To; mbelllna$o#vb2themcis.com
Добро пожаловать в список рассылки С#, дорогой Марко Бе/шииазо*
ДЛЯ отказа от подписки щелкните мышью на следующей ссылке:
••g-.com
1 1 1 я
Последняя строка этого сообщения представляет собой ссылку, которая, в слу-
чае если ее нажать, удалит данного подписчика из списка рассылки. Эта ссылка
создается динамически из приведенной ниже строки посредством замены тегов на
соответствующие значения, извлеченные из XML-файла:
#SubscriberURL#?ListID=#ListID#&Action=Unsubscribe&Email=#SubscriberEmaiI#
Параметр Action отличает подписку от отказа от подписки. В данном случае
ему присваивается значение unsubscribe. Ссылка ддя осуществления подписки
представляет собой точно такую же строку, но не содержащую параметра Action,
или содержащую параметр Action, которому в качестве значения присваивается
произвольная строка (только не unsubscribe). Остальные параметры, входящие
в ссылку,— это идентификатор списка рассылки (который хранится в форме
в скрытом поле) и адрес электронной почты подписчика.
Сообщение о подтверждении посылается по электронной почте, только если есть
соответствующая установка. Вы, однако, всегда будете получать web-страницу
с подтверждением, в которой содержится тот же самый текст, что и в сообщении.
Процедура отказа от подписки аналогична: администратор определяет, должно ли
посылаться подтверждение, но на сайте в любом случае выводится соответствую-
щая web-страница. Чтобы протестировать выполнение этой операции, откройте
ссылку, присутствующую в предыдущем сообщении, это приведет к открытию бра-
узера и выводу сообщения, представленного на рисунке на стр. 839.
Вы получите точно такой же результат, если выберете опцию unsubscribe
(отказ от подписки) в HTML-форме. У администратора есть также возможность
добавлять или удалять подписчика с помощью страницы subscribers.aspx.
Практический пример 2 — Менеджер рассылки новостей в режиме онлайн 839
NewsMatter; Subscription - Microsoft Internet Explorer
•As
.a^px?listiD«38^cbcf^Unsub$ab^£md^
До свидания» С#
8ы исключены из списка рассылки С#. Почему вы приняли такое решение???
~гг
Страница Subscribe.aspx
Код, предназначенный для создания этой страницы, является наиболее корот-
ким из всех встречавшихся нам в этой главе:
<body> :.
<азр:Label ID="Subject" runat-"Server" ,
CssClass="SubscrSubject:i Visible^"false" />
<asp:Label ID="Message" runat-"Server"
CssClass="SubscrMessage" Visible^"false" />
<asp:Label runat = "server" ID="EmailRequired" Visible^"false"
Text="The Email address is required" Cless=Error" />
</body>
На странице присутствует три надписи: для подтверждения, для тела сообще-
ния и для сообщения об ошибке, если не задан адрес электронной почты. Все эти
надписи по умолчанию являются невидимыми. Они выводятся, только после того
как пользователь выполняет операцию подписки или отказа от подписки и в соот-
ветствии с ее результатом.
Код поддержки для Subscribe.aspx
Весь код данного класса поддержки помещен в процедуру Page_Load(), поско-
льку все операции выполняются в момент загрузки страницы и на ней не сущест-
вует каких-либо форм или управляющих элементов, которые приводят
к наступлению других событий. Код для данного обработчика событий приводится
ниже полностью:
protected void Page__Load(object sender,EventArgs e)
.; :•.:;.• , • i n t S u b s c r l D ; .-. . . . : .. ..• . • • :
bool SendEmail;
// считать ListID, FirstName, LastName, Email and Action
//из QueryString, сгенерированной формой HTML
int ListID = int.Parse(Request.Params["ListID*]); ;
string FirstName = Request .Params [* FirstName•] + ' " ;
string LastName = Request.Params[^LastName"] + " "] ;
string Email = Request.Parains ['Email'] + * '] ; ::
string Action = Request.Params["Action"] + • *;
if (Email.Trim()=-"")
// если объект Email не был определен,
// вывести сообщение об ошибке и завершить работу
EmailRequired.Visible = true;
e l s e : " .' • • ' :••" •• •••••••:'-';: • : • • • '••• : ' ' '
{ . '• • ^ . Щ : Ш$Щ
string SubjectText;
string MessageText; . : " ;
840 Практический пример
// создать объекты для работы с установками и с подписчиком
NewsMailer.AppSettings settings =
. NewsMailer«AppConfig.GetSettings{
. , Server.MapPath{GetSettingsFile()});
NewsMailer.SubscribersDB subscribers - new
NewsMailer.SubscribersDB(GetConnString());
// лишение подписки
if (Action.CompareTo ("Unsubscribe" }—0) ;
{
// считать сообщение от подписчика
//и проверить, требуется ли подтверждающий ответ по Email
SendEmail - settings.SendUnSubscrSmail;
SubjectText = settings.UnsubscrSubjееt;
MessageText = settings.UnSubscrMessage;
// считать ID этого подписчика из Email
SubccrlD - subscribers.GetSubscrID(ListID/ Email);
// заменить теги этого подписчика
MessageText = NewsMailer,Utilities.ProcessSubscriberTags(
MessageText, GetConnString(), SubscrlD);
. ••// вычеркнуть подписчика :
subscribers.Delete{SubscrlD); •
} :, •
else //оформить подписку
{ ' • •;..;.;.
• ' // считать сообщение от подписчика
// и проверить, требуется ли подтверждающий ответ по Email
SendEmail = settings.SendSubscrEmail;
SubjectText = settings.SubscrSubject;
MessageText. = settings. SubscrMessage;
••;: // добавить подписчика
subscribers.Add(ListID, FirstName, LastName, Email);
// получить ID только что зарегистрированного подписчика
// или, если подписчик уже зарегистрирован
// с известным Email адресом
SubscrlD - subscribers.GetSubscrlD(ListID, Email);
//заменить теги нового подписчика
MessageText = NewsMailer.Utilities.ProcessSubscriberTags(
MessageText, GetConnString(), SubscrlD);
::-:::> } .. .Л--
// заменить теги по установке и в списке
SubjectText = NewsMailer.Utilities.ProcessListTags(
SubjectText, GetConnString(), ListID);
MessageText = NewsMailer.Utilities,ProcessListTags(
MessageText, GetConnString(), ListID);
MessageText = NewsMailer.Utilities.ProcessSettingsTags (
MessageText, GetConnString());
// если требуется подтверждающий ответ
••:•: : if (SendEmail)
{ ':: .
// создание нового сообщения
MailMessage MailMsg = new MailMessageO ;
MailMsg.From = settings .SenderName + • <" +
; Settings -.Sender Email + ">";
// заполнение поля "Кому" в Email
M a i l M s g . Т о = E m a i l ; .:••••••..•.,•:... ..:..,•••• •••...-.... •.,.,,:.:::; •,•;.,,:; . x , - . • ,..,: .,
// заполнение поля "Содержание",
//созданного для случая подтверждения
MailMsg.Subject -SubjectText;
MailMsg.Body = MessageText;
Практический пример 2 — Менеджер рассылки новостей в режиме онлайн 841
/7 отсылка сообщения
S m t p M a i l . S e n d ( M a i l M s g ) ; . • -.
v-:• ) S : : : ; Ж , :•; •;• •I)'ЖЙ•' •?• ^ :>:• ••;...:;.'';;:U>'/% J \ ш • '^МЖ^^ •• ••/•:• *ШШ^• • • ':• Ш"'' • • •'• V. -: • . - •.". :,
// вывод сообщения, подтверждающего выполненное действие
•;•;••::•••••., . Subject.Text = SubjectText;
Message.Text - Message-Text;
Subject .Visible = true; . . . • :. ' •
Message,Visible = true;
) • • ; • • • ' • Ш
В первых строках кода из строки запроса извлекаются идентификатор требуе-
мого списка, имя подписчика и его адрес и переносятся в локальные переменные,
с тем чтобы их было проще использовать в данной процедуре в дальнейшем.
Прежде, чем переходить к выполнению дальнейших операций, программа выпол-
няет проверку, не является ли параметр с адресом электронной почты пустым,
и если является, то на экран выводится надпись об ошибке EmaiiRequired (адрес
электронной почты необходим), а остальная часть процедуры не выполняется.
Если адрес электронной почты присутствует, а параметр Action имеет значение
unsubscribe, то программа сначала задает предмет сообщения и текст подтверж-
дения и заменяет специальные теги на информацию о конкретном подписчике,
а затем удаляет информацию о данном подписчике из базы данных. В противном
случае информация о подписчике сначала добавляется в базу данных, а затем
происходит замена тегов. Замена тегов осуществляется после, поскольку методу
utilities.ProcessSubscriberTagsо требуется передать в качестве параметра
идентификатор подписчика, следовательно, информация о новом подписчике сна-
чала должна быть занесена в БД. После этого производится замена специальных
тегов, касающихся списка рассылки и установок, которая является необходимой
независимо от того, подписывается ли пользователь или производит отказ от под-
писки. Если в файле установок хранится информация о том, что требуется отпра-
вить по электронной почте сообщение с подтверждением (состоящее из предмета
сообщения и тела сообщения), то процедура отправляет такое сообщение.
Обеспечение безопасности приложения
К настоящему моменту мы полностью реализовали функциональные возможно-
сти приложения: произведено тестирование программы как со стороны админист-
ратора, так и со стороны конечного пользователя — все работает замечательно.
Осталось обеспечить безопасность. Если не предусмотреть какой-либо либо про-
цедуры регистрации, управляющей доступом к страницам администратора, то это
приведет к тому, что каждый пользователь сможет проникнуть туда и получить
информацию об адресах электронной почты подписчиков, послать фиктивные со-
общения по электронной почте, уничтожить списки рассылки и т. д. При создании
любого общедоступного web-приложения обеспечение безопасности должно быть
одной из самых первых вещей, которые принимаются во внимание на стадии раз-
работки. Однако для небольших приложений, подобных создаваемому нами, обес-
печение безопасности и аутентификация пользователей может быть реализована
в качестве завершающего этапа разработки — без каких-либо проблем и с потря-
сающей легкостью.
842 Практический пример
Установки для обеспечения безопасности
в файле web.config
Впервые мы столкнулись с файлом web.config, когда обсуждали вопрос о хра-
нении строки соединения. Этот файл конфигурации может быть использован так-
же для хранения установок web-страниц, управления состоянием сеанса, приложения
(как например, включенных нами строк connstring и settingsFile), трассировки,
компиляции, обеспечения безопасности и для многого другого. Этот файл оказы-
вается очень полезным, поскольку он позволяет переопределять установки IIS.
Мы планируем рассмотреть хранящиеся в этом файле установки для обеспечения
безопасности. ASP.NET. Названный файл установок предоставляет простой спо-
соб реализовать гибкую систему аутентификации пользователей (в результате чего
пользователю будет либо разрешен, либо запрещен доступ к сайту) и систему
определения полномочий (которая либо предоставляет какие-либо права, либо
отбирает их у пользователей). Основная часть работы выполняется в следующих
строках программы:
<configuration> . . \
<system.web> •'•'••.
: v <authentication mode="Forms"> : . • :•
<forms name=" .NEWSMAILER" loginUr 1=11 Login.aspx"
protection=nAllB timeout="60">
' . <credentials passwordFormat="Clear" >
<user пате=яAdmin" password="AdminOKll/>
<user name-"Marco" password-"MarcoOK"/>
• •• • • : • •• < / c r e d e n t i a l s > •:. : • . .: ,. - . •• ' ; • ;• Щ
</forms>
</authentication> . ;
• ,. <authorization>
' ' ' <deny u s e r s - " ? " /> .: . . ' •• . , : • , - •. •
••-.:•. •:•.:•:••/. : ' .:•..•. •/• < / a U t h o r i Z a t i o n > . • • •• " ••.••.: • ' ': •• • : • \. : ../:':'.. .'••'. . • .-:'.::
</system.web>
<appSettings>
<add key="connstring• value="Provider=Microsoft.Jet.OLEDB.4.0;
Data source=E:\Projects\NewsMailer\DB\NewsMailer.mdb" />
</appsettings>
• </configuration> : . '••;'•••;. " : ' . : : " • : , . ' • • , • : . : • , - • • ' . / ' , ' . ' ; . / ' • . - \ ; . ^ • : - ' . - ' : ' : . ' w - \ - '•;-: \ y ' . •••,•••..••: •• : V •• - : ' ' . ? . : - : - : - -
Выполнение аутентификации в режиме Forms означает, что для регистрации
будет использоваться web-форма (в качестве альтернативных вариантов можно
указать систему HTTP Basic или систему Microsoft Passport). Строки программы,
расположенные внутри раздела <authentication>, определяют URL страницы ре-
гистрации, на которую пользователи будут отправляться, если они не пройдут про-
цедуру аутентификации при попытке доступа к закрытым страницам. Для хранения
информации о регистрации и о полномочиях пользователей, которым разрешен
доступ к сайту, используется куки (.NEWSMAILER). ДЛЯ нашего простого примера
мы храним полномочия в виде комбинаций имени пользователя — пароля. В за-
вершение тег <deny users=n?" />, расположенный внутри раздела <authorization>
определяет, что анонимным пользователям запрещается входить в закрытую часть
приложения.
Обеспечение безопасности в ASP.NET может быть намного более сложным
и профессиональным — это всего лишь пример основ системы аутентификации
пользователей и определения полномочий. Если вы собираетесь пользоваться
файлом web.config, то у вас также появляется возможность зашифровывать
Практический пример 2 — Менеджер рассылки новостей в режиме онлайн 843
пароли с помощью Triple DES. Другая возможность заключается в том, чтобы
либо хранить имена пользователей и пароли в таблице базы данных и использо-
вать собственную функцию для проверки правильности регистрационной информа-
ции, переданной пользователем, либо проверять пользователей по Windows Active
Directory. Все это, однако, выходит за рамки настоящего раздела. Более подроб-
ную информацию вы сможете почерпнуть в документации .NET Framework SDK
или в книге "ASP.NET для профессионалов" ("Professional ASP.NET"), выходящей
в издательстве "Лори" в 2004 г.
Файл Login.aspx и его код поддержки
Теперь нам необходимо создать
Страницу Login.aspx, КОТОрая
в законченном виде выглядит так,
как показано на рисунке справа.
Код, необходимый для создания
страницы, не представляет из себя
ничего особенного — для других
страниц нам уже приходилось пи-
сать более сложные программы,
поэтому сразу перейдем непосред-
ственно к коду, ответственному за
обработку нажатия кнопки Login:
ЭкетМ*
******* T<sd$ нф
——
> ~ i , ' ',,, '•- ' г '%'., ."( < • , 'I-V ,н • >>г' ,', J ; ¥<-,<
L o g i n P a y t ' j
I- ц и ti- JM «;И.
& Po;'5is*'?nt Login
protected void LoginUser_Click (object sender, EventArgs e)
{
//проверка имени и пароля данного пользователя
if (FormatAuthentication.Authenticate(UserName.Text, Password
. : { ' ' •• : • . • • • . • •' •. •. .. • • • - • ' • •:'• ' • • . • • , • : • • • • . . • , :
// если пользователь аутентифицирован, разрешить вход
// (если если это требует пользователь) перейти на страницу,
// которую требует процедура аутентификации
FormsAuthentication, RedirectFromLoginPage(UserName.Text,
Persistent.Checked);
els
•••/./• если имя пользователя или пароль неверны, вывести сообщение об ошибке
I n v a l i d L o g i n . V i s i b l e - t r u e ; •.;:,.••••--'':''••:-:'.,•; •' :•-•'; •.•:':::..'.••,-. • : ; • • ; • ••:-::;-- •;,..• • : ;.•••.
В этой программе осуществляется вызов метода AuthenticateO, который про-
изводит проверку правильности имени пользователя и пароля. Если они не распо-
знаны, то выводится надпись InvalidLogin, в противном случае, регистрационная
информация записывается в куки (если в окне выбора Persistent Login установлен
соответствующий флажок), и браузер переходит на страницу, которая необходима
для регистрации пользователя. URL этой страницы передается в строке запроса,
и вы можете увидеть ее в линейке с адресом на рисунке, приведенном выше: там
ВЫВОДИТСЯ URL localhost/newsmailer/Lis-ts.aspx В закодированном виде. В ЭТОМ
случае, если пользователь попытается загрузить некоторую страницу и не пройдет
процедуру аутентификации, то он будет снова отправлен на страницу регистрации
и после успешного прохождения аутентификации возвращен на исходную страницу.
Теперь приложение выглядит вполне завершенным, однако остается еще одна
маленькая проблема. Что произойдет, если пользователь отправит форму, для того
844 Практический пример
чтобы подписаться на некий список? Такой пользователь не будет аутентифициро-
ван, поэтому он будет отправлен на страницу регистрации. Такого, естественно,
быть не должно, и одним из возможных решений этой проблемы является перенос
страницы Subscribe.aspx в другую папку, куда анонимный пользователь будет*
иметь возможность загрузить требуемую страницу. Такой способ будет, конечно,
работать, но здесь потребуется предусмотреть два файла web.config: один со стро-
кой соединения, хранящийся в корневой папке, а второй с установками для обес-
печения безопасности, хранящийся в закрытой папке. Существует, однако, более
простое решение, для реализации которого требуется добавить лишь несколько
строк в уже существующий файл web.config, и это позволит оставить страницу
Subscribe.aspx там же, где находятся все остальные. Мы располагаем возмож-
ностью задавать различные опции для обеспечения безопасности разных файлов
с помощью тега <iocation>; это означает, что можно закрыть все файлы, как мы
делали это раньше, а затем открыть анонимным пользователям доступ только
К странице Subscribe.aspx:
<configuration>
<system.web>
...Code omitted for clarity
</system.web>
<location path=nSubscribe.aspx">
<system.web>
<authorization>
• • : •: -. ' :. ••••••.•••• - • • • • ' ' •• ' < a l l O W U S e r S = " * " / > '• . •••••.••••••, : •• . , . • • • : ; • • • , • . • • ' , •••• : .•;•••••,:• > v •
</ author ization> • . •••••...-.:•:• ••.•'•.
• • ;••••..,-,•, • • • • < / s y s t e m . w e b > ..•••.• . • •• • • • • • . . • • • . . .••, :. • . ,•. :, ••••:•••.•:•:• .
</location>
<appSettings>
<add key=flconnstringn value="Provider=Microsoft. Jet .OLEDB.4 . 0;
Data source=E:\Projects\NewsMailer\DB\NewsMailer.mdb" />
</appSettings>
</configuration>
Теперь при отправке пользователем формы и загрузке страницы Subscribe.aspx
ASP.NET распознает пользователей как анонимных и разрешает им доступ к этой
странице. Если же пользователь осуществляет попытку попасть на любую другую
страницу (возможно, узнав правильный URL этой страницы), то у него будет за-
прошена регистрационная информация.
И еще один момент: что необходимо предпринять, если возникает необходи-
мость выйти из системы и уничтожить куки, в которых хранится регистрационная
Информация? Мы ВОСПОЛЬЗуеМСЯ метОДОМ SignOutO объекта FormsAuthentication
(который находится в пространстве имен System.web.security) — он выполняет
именно те действия, которые нам требуются. Названный метод вызывается в про-
цедуре Page_Load(), если в строке запроса параметру Action присваивается значе-
ние "logout":
protected void Page_Load(object sender, EventArgs e)
{
// если строка QueryString имеет выходной параметр, осуществите выход
//и удалите куки для входной страницы •
if {Request.Params["Action"]=="logout")
FormsAuthentication.SignOut (); : J:
Практический пример 2 — Менеджер рассылки новостей в режиме онлайн 845
РЯЯЯ?Ш?82<»№&*; гh -••• -•.
j Ш $ii References
! .— *-Й Asse#ib{yln*o.c$
- «Э BasePage.cs
^ j— ||] Forfn¥sflzard.aspx
U Header.ascx
{ Д] Lists^spx
I | h В NeweHttory^jpX
K E S ?
I I f* H Subitrsbe.aspx
Г! г* S Subsorsbers.aspx
| - • [Й Web.conf»g
fj ;*?'" М|Л<ГйД|
: • • i
1
\
\
Страница с таким значением параметра вызывается посредством пункта меню
Logout, который описан в пользовательском управляющем элементе Header следу-
ющим образом:
<asp:HyperLink runat^" server13
NavigateUrl="Login.aspx?ReturnUrl=Lists.aspx&Action=logout
Text="Logout" Class="MenuItemi; .../>
Обратите внимание на то, что в этом случае, кроме параметра *Action=iogout"
используется также и параметр Retumuri, имеющий значение Lists.aspx. Это
оказывается необходимым, поскольку после выхода из системы мы возвращаемся
обратно к регистрационной форме. Если администратор сразу повторно зарегист-
рируется, то странице регистрации необходимо иметь информацию о том, на какую
страницу необходимо перейти.
Компиляция модуля
Последним шагом, перед тем как приступим к тестированию
приложения и загрузке его на web-сервер, является компиляция
всех файлов с кодом поддержки, созданных до настоящего момен-
та. Если вы используете VS.NET, то ваш Solution Explorer должен
выглядеть так, как показано на рисунке слева.
Выберите, команду Build, и VS.NET откомпилирует ваш проект,
ПОЗабоТИВШИСЬ О ССЫЛКах На Два биЗНеС-МОДулЯ (NewsMailerConf ig
И NewsMailerDB).
Запуск приложения
После того как модули откомпилированы, необходимо убедиться
в том, что они находятся в директории bin, которая, в свою очередь,
помещается в корневой папке web-приложения или виртуальной
папке, создаваемой администратором IIS. Измените строку соеди-
нения в файле web.config так, чтобы она указывала на БД Access
(или DSN), и после этого вы готовы к тестированию программы
в Internet Explorer. Чтобы попасть на страницу Lists, необходимо
Отправиться ПО адресу http://localhost/newsmailer/Lists.aspx.
Проблемы совместимости браузеров
Все страницы указанного приложения были разработаны и протестированы
в Internet Explorer 5.5. Если вы используете приложение совместно с Netscape б,
то его внешнее представление будет несколько отличаться, поскольку Netscape
интерпретирует некоторые установки таблицы стилей по-другому. При использо-
вании более ранних версий Netscape данный сайт будет выглядеть еще хуже. Это
составляет большую проблему для сайтов, которые должны быть доступны для
широкой публики. В промышленных системах, когда невозможно потребовать от
пользователей применения определенного браузера (как, например, в данном слу-
чае — по крайней мере, в отношении администраторов), представляется важным
разрабатывать web-страницы так, чтобы они могли работать на любом браузере.
846 Практический пример
Итоги
Первое приложение ASP.NET, использующее базу данных, завершено. Главной
целью этого практического примера было показать, насколько простым является
написание web-приложения, как для этого можно использовать С# и что нужно
для того, чтобы воспользоваться преимуществами, которые дает .NET Framework.
Мы узнали, что использование серверных управляющих элементов ASP.NET по-
зволяет запросто сэкономить на написании нескольких сотен строк кода, получив
при этом более стройный и приятный результат.
Настоящее приложение может использоваться прямо в таком виде для множе-
ства web-сайтов, однако можно включить в него дополнительные возможности,
чтобы сделать его еще более мощным! Предлагаем вам несколько идей:
• Предусмотрите возможность создавать и работать
с подписными формами, которые позволяют пользователю
подписываться за один прием сразу на несколько списков рассылки,
сообщив свой адрес электронной почты только один раз.
• Предусмотрите возможность, позволяющую пользователю выбирать,
хочет ли он получать новостные сообщения в виде HTML или
обычного текста, и отправлять различные сообщения
в соответствии с этим выбором.
• Предусмотрите возможность отправлять вместе с новостными
сообщениями различные приложения.
• Предусмотрите возможность работы нескольких администраторов,
каждый из которых обладает различными правами. Например,
администратор базового уровня получает возможность только
просматривать текущие списки рассылки, и информацию о подписчиках,
администратор второго уровня может отправлять новые сообщения,
а самый продвинутый администратор обладает полным набором прав,
то есть возможностью добавлять, удалять и изменять списки рассылки
и информацию о подписчиках.
Большинство тем, рассмотренных здесь, посвящены web-разработке с исполь-
зованием ASP.NET, но многие принципы и некоторый код (в частности, класс
u t i l i t i e s ) могут быть также приспособлены для использования в приложениях
Windows, например, управление вводом/выводом, объектно-ориентированная раз-
работка, доступ к БД посредством ADO.NET и многие классы .NET Framework.
Поэтому вы можете воспользоваться этим кодом, даже если web-программирова-
ние не является основным объектом ваших интересов.





Категория: информатика | Просмотров: 3193 | Добавил: basic | Рейтинг: 5.0/1
Всего комментариев: 4
4 Juliaafja  
0
Where is the moderator??
It's of significance.
Thanks.

3 liaizPepe  
0
how much do pharmacy techs make http://sundrugstore.net/categories/anti-diabetic.htm pennsylvania medicaid specialty pharmacy program

2 Ким  
0
Стали бы вы покупать верблюжье молоко(ОМСК)?? Отвечайте, пишите коментарии.

1 soampions  
0
Summerinaskinalk

Имя *:
Email *:
Код *:
Календарь
«  Февраль 2010  »
ПнВтСрЧтПтСбВс
1234567
891011121314
15161718192021
22232425262728
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0

krutoto.ucoz.ru
Бесплатный конструктор сайтов - uCoz