Если последний выданный билет больше или равен текущему билету, то запрос определяется как обновление страницы. В данной дипломной работе некоторые фрагменты текста отсутствуют или замещены на текст не соответствующий теме этого диплома. Отсутствуют или не соответствуют некоторые необходимые формулы, расчеты, диаграммы и таблицы. Для получения оригинальной версии работы пишите на электронный адрес, указанный в конце дипломной работы, в заключении. Срок жизни этих данных совпадает со сроком запроса; поэтому любые данные удаляются при создании ответа. Используя статическое свойство HttpContext. Current можно получить доступ к контексту обрабатываемого запроса из любого класса, вовлеченного в этот процесс.
Http-модуль проверки обновления создает новую запись IsPageRefreshed в коллекции Items. Эта логическая переменная обозначает, запрашивалась ли страница с помощью обычного запроса или с помощью обновления. В следующем примере показана реализация http-модуля проверки обновления:
publicclassRefreshModule: IHttpModule
{
public void Init (HttpApplication app)
{
app. AcquireRequestState += new EventHandler(OnAcquireRequestState);
}
private void OnAcquireRequestState (object sender, EventArgs e)
{
HttpApplication app = (HttpApplication) sender;
………………………….
// Проверитьнаобновление
RefreshAction. Check(ctx);
return;
}
}
Класс RefreshAction содержит логику, определяющую, является ли текущий запрос обновлением страницы. Если он распознаётся как обновление, то в коллекции Items объекта HttpContext появляется новая запись IsPageRefreshed, которой присваивается значение true.
public static void Check (HttpContext ctx)
{
EnsureRefreshTicket(ctx);
// Получение предыдущего номера из объекта Session
int lastTicket = GetLastRefreshTicket(ctx);
…………………………………………………….
int thisTicket = GetCurrentRefreshTicket(ctx);
// Сравнениеномеров
if (thisTicket > lastTicket || (thisTicket==lastTicket && thisTicket==0))
{
UpdateLastRefreshTicket (ctx, thisTicket);
………………………………………….
}
else
{
ctx. Items[PageRefreshEntry] = true;
}
}
Класс RefreshPage содержитсвойство IsPageRefresh:
public bool IsPageRefresh
{
get {
object o = HttpContext. Current. Items [RefreshAction. PageRefreshEntry];
if (o == null)
{
return false;
}
return (bool) o;
}
}
Наследую класс web-страниц от класса RefreshPage можно использовать это свойство и определять обновление страницы. Таким образом, можно отслеживать обновление web-страницы при удалении товаров из покупательской корзины. Соответственно, если обнаружено обновление страницы, то товар не удаляется. Код обработчика представлен ниже:
protected void UpdateButton_Click (object sender, EventArgs e)
{
if (! IsPageRefresh && IsValid)
{
int numDeleted = 0;
…………………………………………………………………
{
if (((CheckBox) (row. FindControl ("DeleteCheck"))).Checked)
{
Profile. Cart. RemoveAt (row. RowIndex – numDeleted);
……………….
continue;
}
string regular = "[^0–9]";
string text = ((TextBox) (row. FindControl ("TextBoxQuantity"))).Text;
MatchCollection collect = Regex. Matches (text, regular);
if ((collect. Count!= 0) || (text. Length == 0))
{
continue;
}
Profile. Cart [row. RowIndex – numDeleted].Quantity = Convert. ToInt32 (((TextBox) (row. FindControl ("TextBoxQuantity"))).Text);
}
Profile. Save();
Session ["IsUpdateCart"] = true;
}
Диаграмма классов, используемых для отслеживания обновления web-страниц, приведена на рисунке 10.
Рис. 10 "Диаграмма классов, используемых для отслеживания обновления web-страниц"
4.5 Аутентификация и авторизация пользователей
4.5.1 Описание и настройка интерфейса MembershipAPI
Как уже было сказано в пункте 4.1.1, разработанное web-приложение содержит страницы, доступ к которым должен быть ограничен со стороны не аутентифицированных пользователей, либо аутентифицированных, но не обладающих необходимыми правами доступа.
Аутентификация – это процесс определения личности пользователя.
Авторизация – это процесс определения прав и ограничений, назначенных аутентифицированному пользователю. В данной дипломной работе некоторые фрагменты текста отсутствуют или замещены на текст не соответствующий теме этого диплома. Отсутствуют или не соответствуют некоторые необходимые формулы, расчеты, диаграммы и таблицы. Для получения оригинальной версии работы пишите на электронный адрес, указанный в конце дипломной работы, в заключении. В данном пункте рассмотрен интерфейс Membership API и его применение при разработке дипломного проекта. Интерфейс Roles API описан в пункте 4.5.3.
Интерфейс Membership API предоставляет полный набор функций для хранения информации о пользователях и управления ею.
При разработке дипломного проекта использовались следующие классы, предоставляемые интерфейсом Membership API:
· Membership – предоставляет методы для управления пользователями;
· MembershipUser – предоставляет отдельного пользователя, записанного в хранилище данных. Этот объект содержит всю информацию о данном пользователе и возвращается несколькими методами класса Membership;
Также Membership API содержит набор элементов управления безопасность, предназначенных для создания web-страниц регистрации, входа в систему, смены и восстановления пароля. Все эти элементы полностью настраиваемы и расширяемы. По умолчанию каждый элемент работает на основе Membership API и аутентификации форм, но при необходимости любые события можно переопределить. Аутентификация форм рассмотрена в пункте 4.5.2.
Для того чтобы использовать интерфейс Membership API необходимо создать хранилище данных и настроить его на работу с ним. Для хранения удостоверений пользователей в базе данных web-приложения с помощью программы aspnet_regsql.exe, поставляющейся вместе с.NET Framework 2.0, были созданы специальные таблицы: aspnet_Membership, aspnet_Users и aspnet_Applications, а также хранимые процедуры для доступа к ним. Далее необходимо настроить поставщик Membership API, для обеспечения доступа к хранилищу данных. Это делается с помощью файла конфигурации web-приложения web.config:
<membership defaultProvider= "MyMembershipProvider">
<providers>
<add name= "MyMembershipProvider"
type= "System. Web. Security. SqlMembershipProvider"
………………………………………….
applicationName="/MusicInternetShop"
enablePasswordRetrieval= "true"
enablePasswordReset= "true"
maxInvalidPasswordAttempts= "5"
………………………………….
requiresUniqueEmail= "true"
passwordFormat= "Clear"
minRequiredPasswordLength= "7"/>
</providers>
</membership>
Вэлементе <membership><providers> определеныследующиепараметрынастройкипоставщика Membership:
· name– имяпоставщика;
· applicationName – имя приложения, для которого поставщик управляет пользователями;
· type – тип поставщика. Выбирается в зависимости от используемого хранилища данных;
· connectionStringName – имя строки подключения к хранилищу данных. В данном случае используется строка поключения, описанная в элементе <connectionStrings>
· enablePasswordRetrieval – когда установлено в true, позволяет извлекать пароль из объекта MembershipUser;
· enablePasswordReset – когда установлено в true, включает функциональность для переустановки пользовательских паролей;
· maxInvalidPasswordAttempts – задаёт максимальное количество неудачных попыток входа в систему, прежде чем пользователь будет заблокирован;
· requiresQuestionAndAnswer– когда установлено в true, включает функциональность для восстановления забытого пароля используя контрольный вопрос и ответ, заданные при регистрации пользователя. Восстановленный пароль отправляется на почтовый ящик пользователя, указанный при регистрации;
· requiresUniqueEmail – указывает, должны ли адреса электронной почты быть уникальными для каждого пользователя webприложения;
· passwordFormat
После этого в web-приложении могут использоваться функции, предоставляемые Membership API. В следующем пункте подробно описана система аутентификации форм, основанная на интерфейсе Membership API, которая применяется в разработанном web-приложении.
4.5.2 Аутентификация форм
После того как соответствующим образом настроен интерфейс Membership API, можно реализовывать механизмы аутентификации и авторизации пользователей. В данной дипломной работе некоторые фрагменты текста отсутствуют или замещены на текст не соответствующий теме этого диплома. Отсутствуют или не соответствуют некоторые необходимые формулы, расчеты, диаграммы и таблицы. Для получения оригинальной версии работы пишите на электронный адрес, указанный в конце дипломной работы, в заключении. ASP.NET обрабатывает cookie-набор и устанавливает контекст безопасности каждого запроса.
Аутентификация форм основана на мандатах. Это означает, что когда пользователь регистрируется, он получает так называемый мандат с базовой информацией о себе. Информация сохраняется в зашифрованном cookie-наборе, который прикрепляется к ответу, так что автоматически подтверждается при каждом последующем запросе.
Когда пользователь запрашивает web-страницу, недоступную анонимным пользователям, исполняющая система ASP.NET проверяет, доступен ли аутентифицирующий мандат формы. Если нет, то выполняется автоматическая переадресация на страницу входа в систему. На этой странице пользователь может ввести своё имя и пароль или перейти на страницу регистрации. Если пользователь успешно прошёл проверку, то исполняющая система ASP.NET автоматически устанавливает аутентифицирующий cookie-набор и переадресует пользователя на запрошенную страницу.
Как уже было сказано выше, аутентификация форм работает совместно с интерфейсом Membership API, это означает, что для создания страниц входа в систему и регистрации, можно использовать элементы управления безопасностью, такие как:
· Login – отображает текстовые поля имени пользователя и пароля, а также кнопку "Вход". Автоматически проверяет пользователя с помощью поставщика Membership;
· CreateUserWizard – в данной дипломной работе некоторые фрагменты текста отсутствуют или замещены на текст не соответствующий теме этого диплома. Отсутствуют или не соответствуют некоторые необходимые формулы, расчеты, диаграммы и таблицы. Для получения оригинальной версии работы пишите на электронный адрес, указанный в конце дипломной работы, в заключении;