알고리즘을 쉽게 설명하자면
글입력폼에서 전송버튼을 플래쉬로 만들고 플래쉬에서 Date.getTime()를 이용해 시간(키1값)과 그 시간을 약간 변형(키2값,간단한 암호화)시킨 두 값을 입력값 체크 함수에 넘겨줍니다.
입력값 체크후 폼 전송할때 그 두 값도 같이 넘겨줍니다.
그리고 글 저장하는 곳에서 다시 두값을 비교해 거짓이면 에러를 표시합니다.
참이면 키1값과 현재시간을 비교해 30분(글쓰는데 30분이면 넘치겠죠~)이 넘으면 에러를 표시하고 최근 30분간 등록된 키1값을 불러와 같은 키1값으로 등록시 에러를 표시합니다.
정상적으로 작성된 글들의 키1값은 저장합니다. 그리고 30분이 지난 키1값은 삭제합니다.
이 알고리즘의 핵심은 무조건 플래쉬버튼(전송버튼)을 눌러야만 키값이 생성되어 글이 등록된다는 것에 있습니다.(나 혼자만의 생각인가???)
그러기 위해선 암호화를 잘 시켜야 되는데...
플래쉬는 허접이어서...
그 부분은 아직 미흡한 상태입니다. 고수님들의 도움이 필요한 부분이죠~
아래는 소스예 입니다.
암호화부분 ㅋㅋ 저두 어떻게게 해야 할지 몰라서... 그냥 임의로 적어봤습니다.
_____________________________________________________________________
# 플래쉬 소스(버튼의 액션스크립트)
myDate = new Date;
time = myDate.getTime(); //시간을 구함
on (release) { //버튼을 클릭하면
myString = new String(time);
i = myString.split(""); //시간을 한 문자씩 자르구 값을 변형시킴(암호화 같지 않은 암호화)
s1 =new String(int(i[12])+2);
s2 =new String(int(i[3])+3);
s3 =new String(int(i[10])+3);
s4 =new String(int(i[7])+8);
s5 =new String(int(i[9])+5);
s6 =new String(int(i[8])+2);
time2 = s1+s2+s3+s4+s5+s6;
getURL("javascript:checkIt('"+time+"','"+time2+"');"); //글입력폼의 입력값체크 함수 호출 키1값과 키2값을 넘겨줌...
}
if(!$ch_auto OR !$ch_auto2) { //체크값이 없으면 종료
auto_error();
}
$signdate = time(); // DATE
$ch_auto3 = ($ch_auto[12]+2).($ch_auto[3]+3).($ch_auto[10]+3).($ch_auto[7]+8).($ch_auto[9]+5).($ch_auto[8]+2); //키1값은 플래쉬에서 암호화시킨것 처럼 다시 암호화..
if($ch_auto2 != $ch_auto3) {
auto_error();
}
$ch_auto4 = substr($ch_auto,0,10);
$i=intval($signdate) - intval($ch_auto4);
if ($i<10||$i>1800) { //30분이 지난 키값은 에러처리
auto_error();
}
// 먼저 게시판별 30분간 등록키를 처리를 할 manager라는 테이블을 만든다 id:등록게시판,ch_auto:키값저장...
$ch_query = "SELECT ch_auto FROM manager WHERE id = '등록게시판'"; //30분간 등록된 키를 불러온다
$ch_result = mysql_query($ch_query,$dbconn);
$ch_list = mysql_result($ch_result,0,0);
if(!$ch_list) { // 이전 등록된 값이 없으면 ...
$ch_num = 1;
$ch_data[1] = $ch_auto4;
} else { // 있으면 '|' 로 나눠 배열로 저장
$ch_data =explode("|",$ch_list);
$ch_num = 0; //저장된 키 갯수
for($j=1;$j<=$ch_data[0];$j++) { //30분안에 등록된 키로 다시 등록시 에러 처리
if($ch_data[$j] == $ch_auto4) auto_error();
$ch_time = intval($signdate) - intval($ch_data[$j]);
if($ch_time > 1800) {
$ch_data[$j] = ""; //30분이 지난 키값은 삭제
} else {
$ch_num ++;
$ch_data[$j] = $ch_data[$ch_num]; //배열 다시지정
}
}
$ch_num ++;
$ch_data[$ch_num] = $ch_auto4; //지금키값 저장
}
$w_list = $ch_num; // 배열을 조인 후 저장
for($w=1;$w<=$ch_num;$w++){
$w_list = $w_list."|".$ch_data[$w];
}
$ch2_query = "UPDATE manager SET ch_auto = '$w_list' WHERE id = '등록게시판'";
$ch2_result = mysql_query($ch2_query,$dbconn);
###########################################
###### END ######
###########################################