인터넷 에서 우 리 는 매일 셀 수 없 이 많은 양식 을 만 날 수 있 고 그 중 대부분 은 사용자 가 같은 양식 을 여러 번 제출 하 는 것 을 제한 하지 않 는 것 을 볼 수 있다.이런 제한 이 없 으 면 메 일 서비스 중복 구독 이나 중복 투표 등 예상 치 못 한 결과 가 나 올 때 도 있다.일부 asp 초보 자 들 은 asp 응용 프로그램 에서 같은 폼 의 중복 제출 을 어떻게 제한 하 는 지 잘 모 르 기 때문에 ASP 응용 프로그램 에서 사용자 가 현재 세 션 기간 에 같은 폼 을 여러 번 제출 하 는 것 을 방지 하 는 간단 한 방법 을 소개 합 니 다. 이 작업 은 주로 네 개의 키 프로그램 으로 구성 되 어 있 으 며,비교적 간단 한 응용 장소 에 서 는 이 코드 를 포함 파일 에 넣 고 직접 참조 하면 된다.비교적 복잡 한 환경 에 대해 우 리 는 문장의 마지막 부분 에서 개선 방안 을 제시 했다.1.기본 작업 과정 다음은 우리 순서대로 이 네 가지 절 차 를 토론 합 시다. (1)여기 서 초기 화 하려 면 세 션 대상 에 두 개의 변 수 를 저장 해 야 합 니 다.그 중에서: ⑴ 모든 폼 은 FID 라 는 유일한 표지 에 대응 하여 이 값 을 하나의 계수 기 를 사용 해 야 합 니 다. ⑵ 폼 이 성공 적 으로 제출 될 때마다 Dictionary 대상 에 FID 를 저장 해 야 합 니 다.우 리 는 상술 한 데 이 터 를 초기 화 하 는 전용 과정 을 사용한다.이후 에 각 하위 프로그램 이 그것 을 호출 해 야 하지만 실제 세 션 마다 한 번 만 실 행 됩 니 다
Sub InitializeFID()
If Not IsObject(Session("FIDList")) Then
Set Session("FIDList")=Server.CreateObject("Scripting.Dictionary")
Session("FID")=0
End If
End Sub
(2)폼 을 만 드 는 유일한 식별 자 아래 에 있 는 이 함수 GenerateFID()는 폼 을 만 드 는 유일한 표지 입 니 다.이 함 수 는 먼저 FID 값 을 1 로 추가 한 다음 에 되 돌려 줍 니 다
Function GenerateFID()
InitializeFID
Session("FID") = Session("FID") + 1
GenerateFID = Session("FID")
End Function
(3)제출 된 양식 을 등록 할 때 Dictionary 대상 에 유일한 표 지 를 등록 합 니 다
Sub RegisterFID()
Dim strFID
InitializeFID
strFID = Request("FID")
Session("FIDlist").Add strFID, now()
End Sub
(4)양식 이 정식 적 으로 사용자 가 제출 한 양식 을 처리 하기 전에 Dictionary 대상 에서 FID 가 등록 되 었 는 지 확인 해 야 합 니 다.아래 의 CheckFID()함 수 는 이 작업 을 완성 하 는 데 사 용 됩 니 다.등록 되 어 있 으 면 FALSE 로 돌아 갑 니 다.그렇지 않 으 면 TRUE 로 돌아 갑 니 다
Function CheckFID()
Dim strFID
InitializeFID
strFID = Request("FID")
CheckFID = not Session("FIDlist").Exists(strFID)
End Function
2.어떻게 사용 합 니까? 위 함수,즉 폼 생 성 시 와 결과 처리 시 두 곳 을 사용 해 야 합 니 다.상기 네 개의 하위 프로그램 이 포 함 된 파일 Forms.inc 에 넣 었 다 고 가정 하면 다음 코드 는 FID 값 에 따라 폼 생 성 또는 처리 폼 결 과 를 결정 합 니 다.이 처리 과정 은 대부분의 ASP 응용 프로그램 에 적합 합 니 다
< %Option Explicit%>
< !--#include file="forms.inc"-->
< HTML>
< HEAD>
< TITLE> < /TITLE>
< /HEAD
< BODY>
< %
If Request("FID") = "" Then
GenerateForm
Else
ProcessForm
End If
%>
< /BODY>
< /HTML>
GenerateForm 은 폼 생 성 을 책임 지고 폼 에 숨겨 진 FID 가 있어 야 합 니 다.예 를 들 어:
< %
Sub GenerateForm()
%>
< form action="< %=Request.ServerVariables("PATH_INFO")%>" method=GET>
< input type=hidden name=FID value="< %=GenerateFID()%>">
< input type=text name="param1" value="">
< input type=submit value="OK">
< /form>
< %
End Sub
%>
ProcessForm 은 양식 을 통 해 제출 한 내용 을 처리 하 는 것 을 책임 지지 만 처리 하기 전에 CheckFID()를 호출 하여 현재 양식 이 제출 되 었 는 지 확인 해 야 합 니 다.코드 류 는 다음 과 같 습 니 다
< %
Sub ProcessForm()
If CheckFID() Then
Response.Write " " & Request.QueryString("param1")
RegisterFID
Else
Response.Write " !"
End If
End Sub
%>
3.제한 과 개선 조치 입 니 다. 현재 세 션 기간 에 같은 폼 이 여러 번 제출 되 는 것 을 제한 하 는 방법 을 소개 합 니 다.실제 응용 에서 여러 가지 측면 에서 개선 이 필요 할 수 있 습 니 다.예 를 들 어: ⑴ 폼 ID 를 등록 하기 전에 사용자 가 입력 한 데이터 의 합 법성 을 검사 하여 데이터 가 합 법 적 이지 않 을 때 사용 자 는'후퇴'단 추 를 누 르 고 되 돌아 와 수정 한 후에 같은 폼 을 다시 제출 할 수 있 습 니 다. ⑵ 이 폼 제출 에 대한 제한 은 현재 세 션 기간 에 만 유효 합 니 다.이러한 제한 이 여러 세 션 을 뛰 어 넘 을 수 있다 면 Cookeis 나 데이터베이스 로 관련 데 이 터 를 저장 해 야 합 니 다.