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