Смекни!
smekni.com

Интернет-магазин по продаже музыкальных CD и DVD дисков (стр. 8 из 16)

Если последний выданный билет больше или равен текущему билету, то запрос определяется как обновление страницы. В данной дипломной работе некоторые фрагменты текста отсутствуют или замещены на текст не соответствующий теме этого диплома. Отсутствуют или не соответствуют некоторые необходимые формулы, расчеты, диаграммы и таблицы. Для получения оригинальной версии работы пишите на электронный адрес, указанный в конце дипломной работы, в заключении. Срок жизни этих данных совпадает со сроком запроса; поэтому любые данные удаляются при создании ответа. Используя статическое свойство 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 – в данной дипломной работе некоторые фрагменты текста отсутствуют или замещены на текст не соответствующий теме этого диплома. Отсутствуют или не соответствуют некоторые необходимые формулы, расчеты, диаграммы и таблицы. Для получения оригинальной версии работы пишите на электронный адрес, указанный в конце дипломной работы, в заключении;