В этой статье представлен простой метод в приложениях ASP, позволяющий запретить пользователям отправлять одну и ту же форму несколько раз в течение текущего сеанса. В основном он состоит из четырех подпрограмм. В более простых приложениях вам нужно только поместить эти коды во включенные файлы и напрямую ссылаться на них. Для более сложных сред мы даем некоторые предложения по улучшению в конце статьи.
1. Основной рабочий процесс
Ниже мы по очереди обсудим эти четыре подпрограммы.
(1) Инициализация
Здесь нам необходимо сохранить в объекте Session две переменные, среди которых:
⑴ Каждая форма соответствует уникальному идентификатору, называемому FID, а для придания уникальности значению используется счетчик.
⑵ При успешной отправке формы ее FID должен быть сохранен в объекте Dictionary.
Мы используем специальный процесс для инициализации вышеуказанных данных. Хотя в будущем она будет вызываться каждой подпрограммой, на самом деле она выполняется только один раз за сеанс:
СубинициализеФИД()
Если не IsObject(Session(FIDList)) Тогда
Установить сеанс (FIDList) = Server.CreateObject (Scripting.Dictionary)
Сеанс (FID) = 0
Конец, если
Конец субтитра
(2) Создайте уникальный идентификатор для формы.
Следующая функция GenerateFID() используется для генерации уникального идентификатора формы. Функция сначала увеличивает значение FID на 1, а затем возвращает его:
ФункцияGenerateFID()
ИнициализироватьFID
Сеанс(FID) = Сеанс(FID) + 1
GenerateFID = Сеанс (FID)
Конечная функция
(3) Регистрационная форма
При успешной отправке формы ее уникальный идентификатор регистрируется в объекте Dictionary:
ПодрегистрFID()
Тусклый стрFID
ИнициализироватьFID
стрFID = Запрос (FID)
Сеанс (FIDlist).Добавить strFID, сейчас()
Конец субтитра
(4) Проверьте, отправляется ли форма повторно.
Прежде чем формально обрабатывать форму, отправленную пользователем, следует проверить, зарегистрирован ли его FID в объекте «Словарь». Для завершения этой работы используется следующая функция CheckFID(). Если она была зарегистрирована, она возвращает FALSE, в противном случае — TRUE:
Функция ПроверкаФИД()
Тусклый стрFID
ИнициализироватьFID
стрFID = Запрос (FID)
CheckFID = не сеанс (FIDlist). Существует (strFID)
Конечная функция
2. Как использовать
Есть два места, где используется вышеуказанная функция, а именно: когда форма генерируется и когда обрабатываются результаты. Предположим, что указанные выше четыре процедуры помещены во включенный файл Forms.inc. Следующий код определяет, следует ли генерировать форму или обрабатывать результаты формы на основе значения FID. Описываемый процесс обработки подходит для большинства приложений ASP:
<%Явный вариант%>
< !--#include file=forms.inc-->
<HTML>
<ГОЛОВА>
<TITLE>Тест подачи формы</TITLE>
</ГОЛОВКА
<ТЕЛО>
<%
Если запрос(FID) = Тогда
Генерироватьформу
Еще
ПроцессФорма
Конец, если
%>
</ТЕЛО>
</HTML>
GenerateForm отвечает за создание формы, которая должна содержать скрытый FID, например:
<%
Подгенерироватьформу()
%>
< действие формы=< %=Request.ServerVariables(PATH_INFO)%> метод=GET>
< тип ввода=скрытое имя=значение FID=< %=GenerateFID()%>>
<тип ввода=имя текста=значение параметра1=>
<тип ввода=отправить значение=ОК>
</форма>
<%
Конец субтитра
%>
ProcessForm отвечает за обработку содержимого, отправленного через форму, но перед обработкой вам следует вызвать CheckFID(), чтобы проверить, была ли отправлена текущая форма. Код выглядит следующим образом:
<%
Форма ПодПроцесса()
Если CheckFID() Тогда
Response.Write Вы ввели & Request.QueryString(param1)
РегистрацияFID
Еще
Response.Write Эту форму можно отправить только один раз!
Конец, если
Конец субтитра
%>
3. Ограничения и меры по улучшению
Выше мы представили способ ограничить отправку одной и той же формы несколько раз в течение текущего сеанса. В практических приложениях могут потребоваться улучшения во многих аспектах, таких как:
⑴ Проверьте законность данных, введенных пользователем, перед регистрацией идентификатора формы, чтобы, если данные незаконны, пользователь мог нажать кнопку «Назад», чтобы вернуться и снова отправить ту же форму после исправления.
⑵ Это ограничение на отправку формы действительно только на время текущего сеанса. Если это ограничение необходимо для охвата нескольких сеансов, для сохранения соответствующих данных будут использоваться файлы cookie или база данных.
⑶ Этот метод небезопасен. Он используется только для предотвращения неправильного использования и не мешает опытным пользователям намеренно отправлять одну и ту же форму несколько раз.