우리는 매일 인터넷에서 수많은 양식을 접하며, 대부분의 양식은 사용자가 동일한 양식을 여러 번 제출하는 것을 제한하지 않는다는 것도 알고 있습니다. 이러한 제한이 없으면 이메일 서비스에 대한 반복 구독이나 반복 투표와 같은 예상치 못한 결과가 발생할 수 있습니다. 일부 ASP 초보자는 ASP 응용 프로그램에서 동일한 양식의 반복 제출을 제한하는 방법을 모를 수도 있습니다. 따라서 여기에서는 사용자가 ASP 응용 프로그램의 현재 세션 동안 동일한 양식을 여러 번 제출하는 것을 방지하는 간단한 방법을 소개하겠습니다.
이 작업은 주로 4개의 서브루틴으로 구성됩니다. 보다 복잡한 환경의 경우에는 포함된 파일에 이러한 코드를 넣기만 하면 됩니다. 기사 마지막 부분에 몇 가지 개선 제안이 나와 있습니다.
1. 기본 작업 프로세스
아래에서는 이 네 가지 서브루틴을 차례로 설명합니다.
(1) 초기화
여기서는 Session 객체에 두 개의 변수를 저장해야 합니다. 그 중:
⑴ 각 형태는 FID라는 고유 식별자에 해당하며, 이 값을 고유하게 만들기 위해 카운터가 사용됩니다.
⑵ 양식이 성공적으로 제출될 때마다 해당 FID가 사전 개체에 저장되어야 합니다.
우리는 위의 데이터를 초기화하기 위해 전용 프로세스를 사용합니다. 나중에 각 서브루틴에 의해 호출되지만 실제로는 각 세션 중에 한 번만 실행됩니다.
Sub 초기화FID()
IsObject(Session("FIDList"))가 아닌 경우
Set Session("FIDList")=Server.CreateObject("Scripting.Dictionary")
세션("FID")=0
종료 조건
End Sub
(2) 양식의 고유 식별자를 생성합니다.
다음 함수인 GenericFID()는 양식의 고유 식별자를 생성하는 데 사용됩니다. 이 함수는 먼저 FID 값을 1씩 증가시킨 다음 이를 반환합니다.
함수 생성FID()
FID 초기화
세션("FID") = 세션("FID") + 1
생성FID = 세션("FID")
End Function
(3) 제출된 양식을 등록합니다.
양식이 성공적으로 제출되면 해당 고유 식별자를 Dictionary 개체에 등록합니다:
Sub RegisterFID()
희미한 strFID
FID 초기화
strFID = 요청("FID")
세션("FIDlist").strFID 추가, 지금()
End Sub
사용자가 제출한 양식을 정식으로 처리하기 전에 양식이
반복적으로 제출되었는지 확인해야 합니다.
해당 FID가 Dictionary 개체에 등록되어 있는지 확인해야 합니다.다음 CheckFID() 함수는 이 작업을 완료하는 데 사용됩니다. 등록된 경우 FALSE를 반환하고 그렇지 않으면 TRUE를 반환합니다.
Function CheckFID()
희미한 strFID
FID 초기화
strFID = 요청("FID")
CheckFID = Session("FIDlist").Exists(strFID)가 아님
End Function
2. 사용방법
위 함수는 Form을 생성할 때와 결과를 처리할 때 두 군데에서 사용됩니다. 위의 4개 서브루틴이 포함된 파일 Forms.inc에 배치되었다고 가정합니다. 다음 코드는 FID 값을 기반으로 양식을 생성할지 아니면 양식 결과를 처리할지를 결정합니다. 이 코드에서 설명하는 처리 프로세스는 대부분의 ASP 응용 프로그램에 적합합니다
. %옵션 명시%>
< !--#include 파일="forms.inc"-->
<HTML>
<헤드>
<TITLE>양식 제출 테스트</TITLE>
</HEAD
<바디>
< %
Request("FID") = ""인 경우
양식 생성
또 다른
프로세스양식
종료 조건
%>
</BODY>
</ /HTML>
생성 폼은 다음과 같은 숨겨진 FID를 포함해야 하는 양식을 생성하는 역할을 담당합니다.
< %
하위생성양식()
%>
< 형식 action="< %=Request.ServerVariables("PATH_INFO")%>" method=GET>
< 입력 유형=숨겨진 이름=FID 값="< %=GenerateFID()%>">
<입력 유형=텍스트 이름="param1" 값="">
<입력 유형=값 제출="OK">
</양식>
< %
서브 끝
%>
ProcessForm은 양식을 통해 제출된 콘텐츠를 처리하는 역할을 담당하지만, 처리하기 전에 CheckFID()를 호출하여 현재 양식이 제출되었는지 확인해야 합니다.
< %
하위 프로세스양식()
CheckFID()이면
Response.Write "입력한 내용은 다음과 같습니다." & Request.QueryString("param1")
등록FID
또 다른
Response.Write "이 양식은 한 번만 제출할 수 있습니다!"
종료 조건
서브 끝
%>
3. 제한 사항 및 개선 조치
위에서는 현재 세션 동안 동일한 양식이 여러 번 제출되지 않도록 제한하는 방법을 소개했습니다. 실제 적용에서는 다음과 같은 여러 측면에서 개선이 필요할 수 있습니다.
⑴ 양식 ID를 등록하기 전에 사용자가 입력한 데이터의 적법성을 확인하여 데이터가 불법인 경우 사용자가 "뒤로"를 누를 수 있도록 합니다. 수정 후 동일한 양식을 다시 제출하려면 버튼을 클릭하세요.
⑵ 양식 제출에 대한 이러한 제한은 최대 현재 세션 기간 동안만 유효합니다. 여러 세션에 걸쳐 이 제한이 필요한 경우 관련 데이터를 저장하기 위해 Cookeis 또는 데이터베이스가 사용됩니다.