phpsource/회원인증2002. 2. 25. 14:30
파일 구성
adult.php - 성인 인증을 통과한 접속자에게 성인물을 제공함
로직
< 성인용 페이지 로직 >
성인 인증받지 못한 방문자 걸러내기
PHP 4.0.0 ~ 4.0.3일 때
[code php;gutter:false] session_start(); if (!isset($HTTP_SESSION_VARS["AdultCard"]) || "ok" != $HTTP_SESSION_VARS["AdultCard"]["permission"]) { // // 로그인을 거치지 않는 방문자 // ?> <META http-equiv='refresh' content='0; url=home.php'> <?php exit; } $AdultCard = $HTTP_SESSION_VARS["AdultCard"]; // // 성인 인증 성공 // [/code]
성인 인증에 성공한 다음에 세션변수 $AdultCard를 다룰 때는 반드시 전역변수 $AdultCard를 가지고 다루시기 바랍니다. 그래야 변경된 세션변수값이 정상적으로 다음 페이지에 넘어갑니다.
PHP 4.0.4 ~ 4.0.5일 때
[code php;gutter:false] session_start(); if (!isset($HTTP_SESSION_VARS["AdultCard"]) || "ok" != $HTTP_SESSION_VARS["AdultCard"]["permission"]) { // // 로그인을 거치지 않는 방문자 // ?> <META http-equiv='refresh' content='0; url=home.php'> <?php exit; } $AdultCard = & $HTTP_SESSION_VARS["AdultCard"]; // // 성인 인증 성공 // [/code]
성인 인증에 성공한 다음에 세션변수 $AdultCard를 다룰 때는 전역변수 $AdultCard 또는 $HTTP_SESSION_VARS["AdultCard"] 중 어느 것을 가지고 다루어도 관계없으나 가능하면 $HTTP_SESSION_VARS["AdultCard"]으로 다루도록 하세요. 그것이 향후 문서를 PHP 4.1.0으로 업그레이드할 때 작업하기가 편할 것입니다.
PHP 4.1.0 ~ 일 때
[code php;gutter:false] session_start(); if (!isset($_SESSION["AdultCard"]) || "ok" != $_SESSION["AdultCard"]["permission"]) { // // 로그인을 거치지 않는 방문자 // ?> <META http-equiv='refresh' content='0; url=home.php'> <?php exit; } // // 성인 인증 성공 // [/code]
성인 인증에 성공한 다음에 세션변수 $AdultCard를 다룰 때는 전역변수 $AdultCard 대신에 $_SESSION["AdultCard"]을 가지고 다루어 주시기 바랍니다. 이렇게 하는 것이 보안성 측면에서 유리하다고 PHP 메뉴얼에 적혀있네요. 물론 $_SESSION 대신에 이전 버전부터 사용하던 $HTTP_SESSION_VARS를 이용하셔도 관계없습니다만 향후 업그레이드될 때의 호환성을 고려한다면 $_SESSION이 더 나을 것 같습니다.
성인용 게시물
위에서와 같이 성인 인증을 거친 방문자에게는 적절한(?) 내용을 보여주어야 겠지요. 그 내용은 저도 모릅니다. 알아서 하세요. 단 로그아웃을 위한 메뉴 하나 정도는 꼭 필요하겠지요.
[code html;gutter:false] <HTML> <HEAD> <TITLE>성인용 페이지</TITLE> </HEAD> <BODY> // // 성인용 게시물(내용 생략) // <A href="./logout.php">로그아웃</A> </BODY> </HTML> [/code]

Posted by 방글24
phpsource/회원인증2002. 2. 25. 14:26
파일 구성
logout.php - 로그아웃 처리
로직
< 로그아웃처리 페이지 로직 >
소스 코드
각 버전별로 작성된 코드를 보면 session_unset 함수를 이용하여 모든 세션변수를 해제시키지 않고 세션변수 $AdultCard 에 대하여만 해제시키도록 하였습니다. 세션 함수를 본 성인 인증 소스만 사용한다면 session_unset 함수로 모든 세션변수를 해제시켜도 관계없지만 만약 성인 인증 소스 외에 현 웹사이트의 다른 문서에서도 세션 함수를 사용해야 한다면 성인 인증 소스에서만 사용하고 있는 세션변수 $AdultCard 만 해제시켜야 다른 문제가 발생하지 않습니다.
PHP 4.0.0 ~ 4.0.5일 때
[code php;gutter:false] <?php session_start(); session_unregister("AdultCard"); ?> <META http-equiv='refresh' content='0; url=home.php'> [/code]
PHP 4.1.0 ~ 일 때
[code php;gutter:false] <?php session_start(); unset($_SESSION["AdultCard"]); ?> <META http-equiv='refresh' content='0; url=home.php'> [/code]

Posted by 방글24
phpsource/회원인증2002. 2. 25. 13:29
파일 구성
login.php - 홈페이지에서 입력된 주민등록번호를 가지고 성인 인증을 수행함
로직
< 홈페이지 로직 >
처음 접속자 확인, 주민등록번호 2차 검증 및 성인 판정에 따른 분기
PHP 4.0.0 ~ 4.0.3일 때
[code php;gutter:false] session_start(); if (!isset($HTTP_SESSION_VARS["AdultCard"])) { // // 웹사이트에 처음 접속했거나 로그아웃한 경우 // ?> <META http-equiv='refresh' content='0; url=home.php'> <?php exit; } $AdultCard = $HTTP_SESSION_VARS["AdultCard"]; if ($birth=check_jumin($HTTP_POST_VARS["j1"], $HTTP_POST_VARS["j2"])) { // // 주민등록번호가 정상적으로 입력된 경우 // if (19 <= check_age(substr($birth, 0, -1))) { // // 성인(만19세 이상)인 경우 // $AdultCard["permission"] = "ok"; ?> <META http-equiv='refresh' content='0; url=adult.php'> <?php exit; } } // // 주민등록번호가 틀렸거나 성인이 아닌 경우 // $AdultCard["permission"] = "no"; ?> <META http-equiv='refresh' content='0; url=home.php'> <?php exit; [/code]
PHP 4.0.4 ~ 4.0.5일 때
[code php;gutter:false] session_start(); if (!isset($HTTP_SESSION_VARS["AdultCard"])) { // // 웹사이트에 처음 접속했거나 로그아웃한 경우 // ?> <META http-equiv='refresh' content='0; url=home.php'> <?php exit; } $AdultCard = & $HTTP_SESSION_VARS["AdultCard"]; if ($birth=check_jumin($HTTP_POST_VARS["j1"], $HTTP_POST_VARS["j2"])) { // // 주민등록번호가 정상적으로 입력된 경우 // if (19 <= check_age(substr($birth, 0, -1))) { // // 성인(만19세 이상)인 경우 // $HTTP_SESSION_VARS["AdultCard"]["permission"] = "ok"; ?> <META http-equiv='refresh' content='0; url=adult.php'> <?php exit; } } // // 주민등록번호가 틀렸거나 성인이 아닌 경우 // $HTTP_SESSION_VARS["AdultCard"]["permission"] = "no"; ?> <META http-equiv='refresh' content='0; url=home.php'> <?php exit; [/code]
PHP 4.1.0 ~ 일 때
[code php;gutter:false] session_start(); if (!isset($_SESSION["AdultCard"])) { // // 웹사이트에 처음 접속했거나 로그아웃한 경우 // ?> <META http-equiv='refresh' content='0; url=home.php'> <?php exit; } if ($birth=check_jumin($_POST["j1"], $_POST["j2"])) { // // 주민등록번호가 정상적으로 입력된 경우 // if (19 <= check_age(substr($birth, 0, -1))) { // // 성인(만19세 이상)인 경우 // $_SESSION["AdultCard"]["permission"] = "ok"; ?> <META http-equiv='refresh' content='0; url=adult.php'> <?php exit; } } // // 주민등록번호가 틀렸거나 성인이 아닌 경우 // $_SESSION["AdultCard"]["permission"] = "no"; ?> <META http-equiv='refresh' content='0; url=home.php'> <?php exit; [/code]
주민등록번호 2차 검증
주민등록번호 체계
현재 주민등록번호는 1975년부터 사용된 것으로 모두 13개 숫자로 돼 있습니다. 최초 6개 숫자는 생년월일을 나타내고, 뒤쪽 7개 숫자는 출생연대, 성별, 주민등록번호 발급기관, 신고순위 등으로 이루어진 다소 복잡한 구조로된 조합으로 그 조합체계는 공개되어 있지 않습니다.
조합체계에 대한 정확한 내용은 알 수 없으나 아래에 있는 주민등록법 개정행동연대에서 올린 "주민등록번호 체계"에 대한 글을 보시면 그 체계의 일부나마 알 수 있을 것입니다. 확인된 바는 없지만 이러한 조합체계는 시대에 따라(?) 약간의 유동이 있었던 것 같습니다. 따라서 현재 공개되는 주민등록번호 유효성 검증 소스들에는 거의 모두 약간의 오류를 포함하고 있지 않나 생각합니다.
주민등록번호 체계 -- 주민등록법개정행동연대
(수정:2010.1.11) 오래된 문서라서 현재는 링크가 깨진 상태입니다. 주민등록번호 체계에 대하여는 아래를 참조하세요.
우리나라의 주민등록제도는 1962년 주민등록법의 제정으로 처음 도입되었으며, 1975년 주민등록법시행령과 시행규칙의 개정으로 생년월일, 성별, 지역을 식별할 수 있도록 된 13자리의 숫자체제로 바뀌어 현재까지 사용되고 있습니다.
앞의 여섯자리 숫자는 생년월일을 나타냅니다. 뒤의 7자리 숫자는 출생연대, 성별, 주민등록번호 발급기관, 신고순위 및 오류검증번호를 나타냅니다.
뒤의 7자리 숫자 중 맨 앞자리 숫자는 출생연대와 성별을 나타냅니다. 예를 들면, 1900년대에 태어난 남자는 1번, 여자는 2번, 2000년대에 태어난 남자는 3번, 여자는 4번이 부여됩니다.
두 번째 자리부터 다섯번째 자리까지의 네자리 숫자는 최초 주민등록번호 발급기관의 고유번호, 여섯번째 자리는 신고순위, 마지막 일곱번째 숫자는 주민등록번호가 맞는지 여부를 증명해주는 오류수정 번호입니다.
주민번호체계 : YYMMDD - ABCDEFG

YYMMDD : 생년월일
예) 790309

A는 성별을 표시합니다.
예) 2000년대 남자 - 3, 여자 - 4
1900년대 남자 - 1, 여자 - 2
1800년대 남자 - 9, 여자 - 0

BCDE : 최초 주민등록번호 발급기관의 고유번호

F : 주민등록지에서 그 생년월일로 신고된 순서

G : 앞의 숫자들을 조합, 계산하여 산출되는 오류검증번호
주민등록번호 검증 함수
[code php;gutter:false] check_jumin($jumin1, $jumin2) [/code]
지정된 주민등록번호가 유효하면 생년월일 및 성별을 나타내는 문자열을, 틀리면 false를 반환한다. $jumin1은 주민등록번호 중 앞쪽 6자리의 숫자를 나타내는 문자열이며, $jumin2는 뒷쪽 7자리의 숫자를 나타내는 문자열입니다.
반환되는 값의 예를 보면 1991년 1월 12일에 출생한 남성이라면 "19910112M"을 반환하고 여성이라면 "19910112F"를 반환합니다. 아래는 이 함수에 대한 전체 소스입니다. 참고로 말씀드린다면 이와같은 검증 소스를 응용하여 주민등록번호를 임의로 생성해 주는 소스를 제작, 배포하는 것은 현행법상 엄연한 범법행위로 처벌받게 된다는 것을 명심하시기 바랍니다.
[code php;gutter:false] function check_jumin($jumin1, $jumin2) { if(strlen($jumin1) != 6 || strlen($jumin2) != 7) { return false; } $jumin = $jumin1 . $jumin2; for ($i=$sum=0;$i<12;$i++) { $sum += intval($jumin[$i]) * (($i % 8) + 2); } // // Checksum // if ((11 - ($sum % 11)) % 10 != intval($jumin[12])) { return false; } // // 총13자리의 주민등록번호 중 7번째의 숫자는 1부터 4까지의 값을 갖는다. // 이 값에 따라 성별 및 Y2K가 확인된다. // $a = intval($jumin[6]); if ($a < 1 || 4 < $a) { return false; } $sex = ($a % 2) ? "M" : "F"; $year = ($a < 3) ? 1900 : 2000; // // 출생년 확인 // $year += intval(substr($jumin1, 0, 2)); // // 출생월 확인 // $month = intval(substr($jumin1, 2, 2)); if($month < 1 || 12 < $month) { return false; } // // 출생일 확인(각 달에 따른 날수 차이 및 윤달 고려) // $day = intval(substr($jumin1, 4, 2)); $days = array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31); // // 2월생이면 윤달 확인 // if (2 == $month && check_leapyear($year)) { $days[1] = 29; } if(($day < 1) || ($days[$month-1] < $day)) { return false; } // // 반환값 // // 남성이면 "yyyymmddM", 여성이면 "yyyymmddF" // return "$year" . substr($jumin1, 2) . $sex; } [/code]
여기에 기술된 소스는 제가 작성한 것이 아니고 아래의 출처에서 밝힌 바와 같이 김순제 님이 작성하신 것에 약간의 수정만 가한 것입니다. 이 소스가 정확히 주민등록번호를 검증할 수 있는 것인지에 대하여는 확신할 수가 없네요. 제가 정확한 주민등록번호 검증 알고리즘을 본 일이 없기 때문에 이미 공개된 것을 그대로 가져왔습니다.
제작 : 김순제 님(soonj@lct.co.kr)
수정 : 후키(hwooky@phpclass.com)
따라서 여기서 공개된 성인 인증 소스는 공부삼아 보시기 바라며 진짜로 성인 사이트를 제작하시려거든 아래 업체에서 제공하는 실명확인 서비스를 받아 성인 인증을 수행하기 바랍니다. 실명확인 서비스란 실명과 주민등록번호가 일치하는지 확인해 주는 서비스를 의미하며 이를 이용하기 위해서는 아래 업체에서 해당 서비스를 신청하여야 합니다.
한국신용평가정보㈜(www.kisinfo.co.kr)
정보통신진흥협회(www.kait.or.kr)
한국신용정보(www.idcheck.co.kr)
윤년 확인 함수
주민등록번호의 유효성을 검증하는 과정에서 윤년 여부를 확인하게 됩니다. 아래와 같은 윤년 확인 로직에 의해 출생년도가 윤년인지 확인한 후 윤년인 경우에는 2월달을 29일까지 계산하면 윤년이 아닌 경우에는 28일까지 계산하여 주민등록번호 유효성을 검증합니다.
< 윤년 확인 로직 >
이러한 기능을 수행하는 것이 check_leapyear 함수이며 이 함수를 실행한 결과 윤년이면 true를, 윤년이 아니면 false를 반환합니다.
[code php;gutter:false] check_leapyear($year) [/code]
성인 확인
정보통신망이용촉진및정보보호 등에 관한 법률 및 청소년보호법 모두를 만족하는 성인 나이가 만 19세 이상인지 연 19세 이상인지는 제가 법률적 지식이 없어 잘 모르겠으나 현재 대부분의 성인 사이트들이 만19세 이상을 성인으로 인증하고 있으며 이에 따라 제가 공개하는 성인 사이트용 인증 소스도 만 19세 이상을 기준으로 인증하고 있습니다. 만약 향후 만 19세 이상이 아니고 연 19세 이상으로 그 기준이 변경되었을 경우에는 성인 확인 부분을 약간 수정하셔야 할 것입니다. 그러나 연나이는 우리나라 나이보다 1살 적기 때문에 "현재년도 - 주민등록년도"라는 수식으로 쉽게 구할 수 있습니다.
참고삼아 말씀드린다면 2001년 5월 24일 개정된 청소년보호법 제2조제1호에 의하면 청소년의 기준이 만나이에서 연나이로 변경되었는데 그 내용을 보면 아래와 같이 정의되어 있습니다.
"청소년"이라 함은 만 19세 미만의 자를 말한다.
다만, 만 19세에 도달하는 해의 1월 1일을 맞이한 자를 제외한다.
<<시행일 2001.8.25>>
`年나이'는 생일로부터 다음해 1월 1일을 지난 횟수만큼을 나이로 인정해 주는 방법으로 예를 들어 2001년 8월23일을 기준으로 1999년 9월 9일생의 경우 `滿나이'로는 한 살, 통상 국내에서 통용하는 나이개념으로는 세 살이 되지만 年나이로는 1월1일을 두 차례 지났기 때문에 두살이 됩니다.
`年나이 19세미만'으로 바뀌면 정상 나이의 대학 1년생의 경우 대학에 입학하는 해 1월1일부터 12월31일까지의 연 나이가 만19세로 돼 청소년보호법의 적용을 받지 않게 됩니다. 이는 생년월일에 따라 만 18세에서 만 19세로 전환되는 시점이 개인마다 달라 생일을 일일이 따져야 하는 불편과 대학 1년생에 대해서는 성인으로 간주하는 사회적 통념과의 괴리를 없애기 위한 것입니다.
滿나이 계산 함수
우리의 전통적인 나이 계산법에 의하면 아래와 같이 나이를 구할 수 있을 것입니다.
우리나라 나이 = 현재년도 - 주민등록년도 + 1
반면 서양식 나이 계산법인 만나이는 현재 생일이 지났을 경우에는 우리나라 나이보다 1살이 적고, 생일이 지나지 않았을 경우에는 2살이 적은 나이입니다. 이러한 만나이를 구하는 함수가 check_age입니다. 이 함수의 입력값으로는 "yyyymmdd" 형태의 문자열을 지정하여 줍니다. 예를 들면 1999년 5월 20일 생이면 "19990520"이 되는 것입니다. 이 함수를 실행하면 정수값으로 만나이를 반환시켜 줍니다.
[code php;gutter:false] check_age($birth) [/code]
이 함수의 전체 소스를 살펴보면 다음과 같습니다. 중간에 있는 $cur_year - $birth_year 의 결과가 바로 연나이에 해당합니다.
[code php;gutter:false] function check_age($birth) { $cur_year = intval(date("Y")); $birth_year = intval(substr($birth, 0, 4)); // // $age + 1 이 우리나라 나이임 // $age = $cur_year - $birth_year; // // month = 01 ~ 12 // day = 01 ~ 31 // $cur_day = intval(date("md")); $birth_day = intval(substr($birth, 4)); if ($cur_day <= $birth_day) { // // 생일이 지나지 않았으면 // $age--; } return $age; } [/code]

Posted by 방글24
phpsource/회원인증2002. 2. 25. 13:26
파일 구성
home.php - 1. 주민등록번호 입력양식을 제공
                 2. 입력된 주민등록번호의 유효성 검증
                 3. 검증 결과에 따른 분기
로직
< 홈페이지 로직 >
세션을 이용한 접속자 상태 확인 및 그에 따른 처리
PHP 4.0.0 ~ 4.0.3일 때
[code php;gutter:false] session_start(); if (!isset($HTTP_SESSION_VARS["AdultCard"])) { // // 웹사이트에 처음 접속했거나 로그아웃한 경우 // session_register("AdultCard"); $HTTP_SESSION_VARS["AdultCard"] = array("permission"=>"no"); } $AdultCard = $HTTP_SESSION_VARS["AdultCard"]; if ("ok" != $AdultCard["permission"]) { // // 처음 접속하거나 로그인에 실패한 경우 주민등록번호 입력양식을 출력 // login_form(); } else { // // 로그인에 성공한 경우는 성인용 페이지로 직행 // ?> <META http-equiv='refresh' content='0; url=adult.php'> <?php } [/code]
PHP 4.0.4 ~ 4.0.5일 때
[code php;gutter:false] session_start(); if (!isset($HTTP_SESSION_VARS["AdultCard"])) { // // 웹사이트에 처음 접속했거나 로그아웃한 경우 // session_register("AdultCard"); $HTTP_SESSION_VARS["AdultCard"] = array("permission"=>"no"); } $AdultCard = & $HTTP_SESSION_VARS["AdultCard"]; if ("ok" != $HTTP_SESSION_VARS["AdultCard"]["permission"]) { // // 처음 접속하거나 로그인에 실패한 경우 주민등록번호 입력양식을 출력 // login_form(); } else { // // 로그인에 성공한 경우는 성인용 페이지로 직행 // ?> <META http-equiv='refresh' content='0; url=adult.php'> <?php } [/code]
PHP 4.1.0 ~ 일 때
[code php;gutter:false] session_start(); if (!isset($_SESSION["AdultCard"])) { // // 웹사이트에 처음 접속했거나 로그아웃한 경우 // $_SESSION["AdultCard"] = array("permission"=>"no"); } if ("ok" != $_SESSION["AdultCard"]["permission"]) { // // 처음 접속하거나 로그인에 실패한 경우 주민등록번호 입력양식을 출력 // login_form(); } else { // // 로그인에 성공한 경우는 성인용 페이지로 직행 // ?> <META http-equiv='refresh' content='0; url=adult.php'> <?php } [/code]
세션 변수 $AdultCard는 연관배열로 "permission" 배열요소의 상태에 따라 성인 인증을 받았는지 안받았는지를 구분합니다. 이 값이 "no"이면 처음 접속하였거나 로그인에 실패한 접속자가 되며, "ok"이면 이미 성인 인증을 받은 접속자임을 나타냅니다.
따라서 "no"일 때는 접속자의 주민등록번호를 입력받는 화면을 나타냄으로 접속자로 하여금 성인 인증이 필요하다는 것을 알려주게되며, "ok"일 때는 즉시 성인용 페이지로 직행하게 됩니다.
PHP 버전에 따라 코딩 방법을 약간씩 다르게 해 보았습니다. 오십보 백보이기는 하지만 그래도 버전별로 보안상 가장 나은 방법을 택하여 작성해 보았습니다. 제가 보안 전문가가 아니라 잘못 이해하고 작성된 것이 있을 지 모르겠네요. 그렇다면 Q & A 게시판을 이용하여 지적하여 주시기 바랍니다. 하위버전용으로 작성된 것은 상위버전에서도 사용될 수 있으나 그 반대로는 불가능합니다.
주민등록번호 입력 화면
< 주민등록번호 입력 >
처음 접속하였거나 앞에서 행한 로그인에서 인증에 실패한 경우에는 이와 같은 입력화면을 출력하여 성인 인증을 위한 주민등록번호를 입력받도록 합니다.
청소년유해매체물의 경우에는 청소년보호법 및 정보통신망이용촉진및정보보호 등에 관한 법률에 의하여 그 표시방법 및 청소년 접근을 제한할 수 있는 방법 등에 관하여 규정하고 있습니다. 성인 인증 소스를 공개하는 본인은 법률의 문외한으로 이 소스가 위의 청소년유해매체물에 대한 표기 및 접근차단 방법이 동법에 적합한지는 알지 못합니다. 따라서 여기서 공개하는 모든 인증 소스는 누구나 자유롭게 이용(복사,수정,배포,재배포)할 수 있으나, 사용중 발생할 수 있는 모든 문제(법규 위반에 따른 책임 소재 및 그 외 발생가능한 모든 피해)에 대하여 어떠한 책임도 질 수 없음을 알려드립니다.
[code html;gutter:false] <CENTER> <TABLE width="400" border="0" cellpadding="0" cellspacing="6"> <TR> <TD align="center" height="134" width=90%> <P> 이 정보내용은 청소년유해매체물로서 정보통신망이용촉진및정보보호 등에 관한 법률 및 청소년보호법의<BR>규정에 의하여 <IMG src="img/19-.gif" align="middle" width="100" height="28" border="0" alt="만19세 미만">의 청소년이 이용할 수 없습니다. </P> <P> 주민등록번호로 성인여부를 판단합니다. </P> </TD> </TR> <TR> <TD align="center" height="102"> <!-- 로그인 폼양식 출력 시작 --> <FORM name=form1 action="login.php" method=post> <TABLE width="350" border="0" cellpadding="0" cellspacing="6" bgcolor="#dbf09f"> <TR> <TD align="right"> 주민등록번호 </TD> <TD> <INPUT size=6 maxlength=6 name=j1 type=text onKeyUp="checkKey(this.form)"> -<INPUT size=7 maxlength=7 name=j2 type=password onKeyDown="checkKey(this.form)"> </TD> </TR> <TR> <TD align="center" height="30" colspan="2"> <INPUT type=button value="성인공간 입장" onClick="checkKey(this.form)"> </TD> </TR> </TABLE> </FORM> <!-- 로그인 폼양식 출력 종료 --> </TD> </TR> </TABLE> </CENTER> [/code]
주민등록번호 1차 검증
주민등록번호를 입력하게 되면 자바스크립트로 작성된 checkKey 함수에 의해 입력된 주민등록번호가 올바른 것인지 1차 검증하게 됩니다. 이 소스 역시 인터넷 상에 이미 공개된 소스로 정확한 검증은 아니며 개략적으로만 그 유효성을 검증할 수 있습니다. 자바스크립트로 더 정확하게 검증해주는 소스를 원한다면 PHPSCHOOL.COM에서 검색해 보세요. 찾을 수 있을 것입니다.
[code html;gutter:false] <SCRIPT language=javascript> <!-- function checkJumin(jumin1, jumin2) { var i, sum = 0; var str = jumin1 + jumin2; if (parseInt(jumin2) < 1000000 && parseInt(jumin2) > 4999999) return false; for (i=0,sum=0; i<12; i++) sum += (((i%8) + 2) * (str.charAt(i) - "0")); if (((11 - (sum % 11)) % 10) == str.charAt(12)) return true; return false; } function checkKey(form) { if (form.j1.value.length==6) form.j2.focus(); key = event.keyCode; if (key==13 || key==0) { if (form.j1.value.length != 6 || form.j2.value.length != 7) { alert("주민등록번호를 입력하세요."); form.j1.focus(); return; } if (checkJumin(form.j1.value,form.j2.value)==false) { alert("주민등록번호가 맞지 않습니다."); form.j1.focus(); return; } form.submit(); } } //--> </SCRIPT> [/code]
현재 페이지에서 입력된 주민등록번호를 1차 검증하여 통과된 경우에만 로그인 처리 페이지로 넘어가 2차 검증을 받게 됩니다. 일단 이곳에서 간략하게나마 입력된 주민등록번호의 유효성을 검증하여 잘못된 것은 다시 주민등록번호를 입력하도록 함으로써 서버의 부하를 다소나마 줄여줄 수 있을 것입니다.

Posted by 방글24
phpsource/회원인증2002. 2. 25. 11:34
세션함수를 이용한 성인용 사이트 인증소스입니다. 주민등록번호를 입력받아 성인용 페이지에 접근할 수 있도록 작성된 "성인 인증 소스"입니다. 작성되었습니다.
파일 구성
home.php  - 성인인증을 위한 주민등록번호 입력(홈페이지)
login.php   - 주민등록번호를 가지고 성인 인증을 수행함
logout.php - 로그아웃 처리
adult.php   - 성인 인증을 통과한 접속자에게 성인물을 제공함
성인 인증 로직
< 성인 인증 로직 >
주민등록번호가 유효한가를 검증하는 부분이 home.php에도 있고, login.php에도 있습니다. home.php에서는 자바스크립트를 이용하여 개략적으로 주민등록번호를 검증하여 줌으로써 주민등록번호를 엉터리로 입력할 경우에는 다음페이지로 넘어가지 않더라도 현재페이지에서 다시 주민등록번호를 입력하도록 유도하여 서버의 부담을 줄여줄 수 있습니다.
login.php에서는 PHP 코드를 사용하여 주민등록번호를 좀 더 정밀하게 검증하여 주게 됩니다.

Posted by 방글24
phpsource/회원인증2001. 2. 22. 15:06
제공되는 메소드
메소드 버전 기능
생성자 0.0.1 쿠커의 객체화, 초기값 설정
check 0.0.1 인증회원에게 현재페이지의 접근을 허용할 것인가를 확인
name 0.0.1 사용자명 및 암호를 저장하는 쿠키명을 획득/설정
logout 0.0.1 로그아웃. 모든 사용자 정보를 삭제
메소드 사용법
생성자 permCook([, string err [, bool path]])
[code php;gutter:false] $perm = new permCook("회원전용 서비스를 받으시려면 먼저 회원으로 가입하세요."); [/code]
생성자에서는 허용되지 않은 방문자가 접근하였을 때 보여주는 에러메시지 err와 인증창에서 디렉토리 인증을 수행하였을 때 필요한 path 매개변수를 지정합니다.
허용되지 않은 방문자가 접근하면 check() 함수를 실행할 때 아래와 같은 에러 양식이 나타납니다. 이 에러 양식에 나타낼 문자열이 첫번째 매개변수 err입니다.
< 에러 출력 화면 >
두번째 파리미터는 쿠키인증 클래스에서와 마찬가지로 디렉토리별로 인증을 수행할 수 있도록 해줍니다. 이 매개변수는 쿠키인증 클래스에서 지정된 값과 동일한 값으로 지정하여야 합니다.
[code php;gutter:false] $perm = new permCook("회원전용 서비스를 받으시려면 먼저 회원으로 가입하세요." , true); [/code]
생성자의 첫번째 매개변수는 또 다른 중요한 기능을 가지고 있습니다. 이를 지정하면 에러 화면에 나타날 문자열이 되지만 이를 생략하거나 널문자를 넘기게 되면 check() 함수를 수행할 때 에러화면이 나타나지 않습니다. 에러 화면은 생성자의 첫번째 매개변수에 널문자가 아닌 문자를 지정하였을 때만 나타나게 되어 있습니다. 이를 지정하지 않으면 어떠한 에러화면도 나타나지 않습니다.
첫번째 매개변수를 지정하게 되면 check() 함수를 실행하는 중에 에러가 발생하면 이에 상당하는 각종 에러 화면을 알아서 보여주지만 대신에 제어권을 사용자에게 넘기지 않습니다. 즉 에러 화면을 보여주는 즉시 실행을 중지합니다. 그러나 지정하지 않게 되면 에러 화면을 보여주지 않지만 대신에 실행을 중지하지 않고 제어권을 사용자에게 넘겨줍니다. 제어권을 사용자에게 넘기면서 현재 상태를 리턴값으로 되돌려 줍니다. 따라서 사용자는 이 값을 확인하여 적절한 처리를 해 주어야 인증 처리에 문제가 발생하지 않습니다. 적절히 처리하지 못하면 문제가 발생하지요. check() 함수에서 되돌려 주는 상태값에 대하여는 check() 함수를 참조바랍니다.
int check([string permission_type, string permission_user])
반환되는 상태를 보면 다음과 같습니다.
상태값 설명
0 현재 페이지에 대하여 접근을 허용함
1 사용자 정보가 없음. 현재 페이지에 접근하기 위해서는 먼저 로그인을 할 것
2 특정회원에게만 허용된 페이지에 호용되지 않은 회원이 접근하려고 함
3 정의되지 않은 퍼미션 등급을 지정하였음
아래는 생성자의 첫번째 매개변수를 지정하였을 때의 예입니다.
[code php;gutter:false] <?php require "./cooker/class.cooker.php"; // 쿠커 require "./authcook/class.permcook.php"; // 쿠키퍼미션 클래스 $perm = new permCook("회원전용 서비스를 받으시려면 먼저 회원으로 가입하세요."); $permission_user = "user1"; $permission_type = "owner"; $perm->check($permission_type, $permission_user); // // 페이지 퍼미션을 통과하였음 // . . . ?> [/code]
아래는 생성자의 첫번째 매개변수를 지정하지 않았을 때의 예입니다.
[code php;gutter:false] <?php require "./cooker/class.cooker.php"; // 쿠커 require "./authcook/class.permcook.php"; // 쿠키퍼미션 클래스 $perm = new permCook; $permission_user = "user1"; $permission_type = "owner"; $status = $perm->check($permission_type, $permission_user); if ($status) { switch ($status) { case 1: // 사용자 정보가 없음 echo "먼저 로그인을 하세요.\n"; break; case 2: // 특정 회원 전용 페이지 echo "회원님은 이 페이지를 이용할 수 없습니다.\n"; break; case 3: // 정의되지 않은 퍼미션 등급 echo "정의되지 않은 퍼미션 등급을 지정하였습니다. 소스코드를 확인하세요.\n"; break; } exit; } // // 페이지 퍼미션을 통과하였음 // . . . ?> [/code]
위에서와 같이 $permission_type 을 "owner"으로 설정하고, $permission_user에 특정회원ID를 설정한 후 $perm->check($permission_type, $permission_user) 함수로 확인하게 되면 쿠키에 기록된 회원ID와 $permission_user가 동일한 경우에만 페이지 접근을 허용하게 됩니다. 회원인증을 통과한 모든 회원이 볼 수 있도록 하려면 $permission_type와 $permission_user를 지정하지 않아도 되며 $perm->check() 함수를 인수없이 실행하면 로그인 과정에서 인증을 통과한 방문자는 모두 현재 페이지를 볼 수 있습니다.
string name([string newname])
쿠커에서 사용되는 쿠키명(cookie name)을 얻거나 새로운 쿠키명으로 설정할 때 사용할 수 있습니다. 새로운 쿠키명을 설정할 때는 반드시 start() 함수보다 앞서 수행하여야 합니다. 쿠커는 기본적으로 쿠키명을 "PHP_AUTH_DATA"로 설정되어 있습니다. 보안을 위해 주기적으로 변경해주는 것이 바람직합니다.
[code php;gutter:false] $auth = new authCook("회원 확인 영역"); $auth->name("NEW_COOKIE_NAME"); $status = $auth->start(); // 인증창을 띄운다. echo "현재 설정되어 있는 쿠키명은 ".$auth->name()."입니다.\n"; [/code]
void logout(void)
쿠커에 저장된 모든 사용자 정보를 삭제합니다. 아울러 쿠키파일도 삭제합니다. 이 함수는 자바스크립트로 구현되어 있으므로 어느 위치에서나 사용할 수 있습니다.
[code php;gutter:false] <?php require "./cooker/class.cooker.php"; // 쿠커 require "./authcook/class.permcook.php"; // 쿠키퍼미션 클래스 $perm = new permCook("회원전용 서비스를 받으시려면 먼저 회원으로 가입하세요."); $perm->check(); // // 페이지 퍼미션을 통과하였음 // $perm->logout(); echo "<A href=login.php3>로그인</A>"; ?> [/code]

Posted by 방글24
phpsource/회원인증2001. 2. 22. 15:00
제공되는 메소드
메소드 버전 기능
생성자 0.0.1 쿠커의 객체화, 초기값 설정
start 0.0.1 사용자명 및 암호를 입력받아 처리함
name 0.0.1 사용자명 및 암호를 저장하는 쿠키명을 획득/설정
gc_maxlifetime 0.0.1 서버상에서 확인하는 쿠키의 생존시간 획득/설정
메소드 사용법
생성자 authCook([string realm [, string err [, bool path]]])
[code php;gutter:false] $auth = new authCook("회원 확인", "회원전용 서비스를 받으시려면 먼저 회원으로 가입하세요."); [/code]
위에서와 같이 클래스 authCook을 객체화하게 되면 start() 함수를 실행할 때 아래와 같이 사용자명 및 암호를 입력받을 수 있는 양식이 나타납니다. 이 화면에서 영역이라고 표시되는 부분에 나타날 문자열이 첫번째 매개변수인 realm입니다.
< 인증창 >
위의 입력양식에서 세번 연속하여 사용자명과 암호를 모두 입력하지 않고 서브밋하면 아래와 같은 에러 양식이 나타납니다. 이 에러 양식에 나타낼 문자열이 두번째 매개변수인 err입니다.
< 에러 출력 화면 >
세번째 파리미터는 "HTTP 인증"에서는 생소한 부분입니다. "HTTP 인증"에서는 한 번 인증하면 모든 디렉토리에서 통용되지요. 이는 반대로 말한다면 디렉토리별로 인증이 어렵다는 것입니다. 그래서 많은 분들이 웹서버 아파치를 통해(.htaccess 파일을 통해) 디렉토리 별로 인증을 수행하는 것을 볼 수 있습니다. 세번째 매개변수가 이와 같이 디렉토리별로 인증을 수행할 수 있도록 쿠키인증 클래스의 쿠키 매개변수 path를 지정하는 역할을 합니다. 생략하면(기본값으로 false로 설정되어 있음) "HTTP 인증"과 마찬가지로 모든 디렉토리에 대하여 한번만 인증을 수행하게 됩니다. 디렉토리별로 인증하고 싶으면 세번째 매개변수의 값을 true라고 지정하시기 바랍니다.
[code php;gutter:false] $auth = new authCook("회원 확인 영역", "회원전용 서비스를 받으시려면 먼저 회원으로 가입하세요.", true); [/code]
생성자의 두번째 매개변수는 또 다른 중요한 기능을 가지고 있습니다. 이를 지정하면 에러 화면에 나타날 문자열이 되지만 이를 생략하거나 널문자를 넘기게 되면 start() 함수를 수행할 때 에러화면이 나타나지 않습니다. 인증창에서 사용자 정보를 입력하는 과정에서는 위에서와 같은 에러 화면말고도 여러가지 에러 화면이 존재합니다. 이미 사용자 정보를 입력하였는데 다시 입력을 요구할 때 발생하는 에러 메시지, 브라우저에 쿠키를 사용할 수 없도록 설정되어 있다는 에러 메시지 등을 위한 에러 화면이 있습니다. 그러나 이러한 에러 화면은 생성자의 두번째 매개변수에 널문자가 아닌 문자를 지정하였을 때만 나타나게 되어 있습니다. 이를 지정하지 않으면 어떠한 에러화면도 나타나지 않습니다.
생성자의 두번째 매개변수를 다른 관점에서 살펴보면, 이를 지정하게 되면 start() 함수를 실행하는 중에 에러가 발생하면 이에 상당하는 각종 에러 화면을 알아서 보여주지만 대신에 제어권을 사용자에게 넘기지 않습니다. 즉 에러 화면을 보여주는 즉시 실행을 중지합니다. 그러나 지정하지 않게 되면 에러 화면을 보여주지 않지만 대신에 실행을 중지하지 않고 제어권을 사용자에게 넘겨줍니다. 제어권을 사용자에게 넘기면서 현재 상태를 리턴값으로 되돌려 줍니다. 따라서 사용자는 이 값을 확인하여 적절한 처리를 해 주어야 인증 처리에 문제가 발생하지 않습니다. 적절히 처리하지 못하면 문제가 발생하지요. start() 함수에서 되돌려 주는 상태값에 대하여는 start() 함수를 참조바랍니다.
int start(void)
사용자 정보를 입력받는 인증창은 별도의 화면에 나타냅니다.
반환되는 상태를 보면 다음과 같습니다.
상태값 설명
0 인증창에서 사용자 이름 및 암호를 정상적으로 입력함
1 웹브라우저의 쿠키 설정이 OFF로 되어 있어 쿠키를 사용할 수 없음
2 인증창에서 사용자 이름 및 암호를 3번 이상 틀리게 입력함
3 이미 로그인 중임. 다른 ID로 인증하려면 먼저 로그아웃하기 바람.
4 인증창이 나타나 있으므로 인증창을 통해 사용자 이름 및 암호를 입력하기 바람
[code php;gutter:false] $auth = new authCook("회원 확인 영역"); $status = $auth->start(); // 인증창을 띄운다. if ($status) { switch ($status) { case 1: // 쿠키 설정이 안됨 echo "웹브라우저에 쿠키를 사용할 수 있도록 설정하세요.\n"; break; case 2: // 회원정보 입력을 3번 이상 틀림 echo "회원전용 서비스를 받으시려면 먼저 회원으로 가입하세요.\n"; break; case 3: // 이미 로그인중 echo "님은 이미 로그인중입니다." ." 다른 ID로 로그인하려면 먼저 로그아웃을 하세요.\n"; break; case 4: // 로그인창 출력중 echo "먼저 로그인창에서 회원정보를 입력하세요.\n"; break; } exit; } // // 쿠키 인증창 통과하였음 // 회원정보테이블과 입력된 회원정보를 비교하여야 함 // . . . [/code]
string name([string newname])
쿠커에서 사용되는 쿠키명(cookie name)을 얻거나 새로운 쿠키명으로 설정할 때 사용할 수 있습니다. 새로운 쿠키명을 설정할 때는 반드시 start() 함수보다 앞서 수행하여야 합니다. 쿠커는 기본적으로 쿠키명을 "PHP_AUTH_DATA"로 설정되어 있습니다. 보안을 위해 주기적으로 변경해주는 것이 바람직합니다.
[code php;gutter:false] $auth = new authCook("회원 확인 영역"); $auth->name("NEW_COOKIE_NAME"); $status = $auth->start(); // 인증창을 띄운다. echo "현재 설정되어 있는 쿠키명은 ".$auth->name()."입니다.\n"; [/code]
void gc_maxlifetime(int lifetime), int gc_maxlifetime(void)
gc_maxlifetime() 함수는 서버에서 쿠키의 유효기간을 확인할 수 있도록 그 시간을 설정하거나 획득하기 위한 함수입니다.
[code php;gutter:false] $auth->gc_maxlifetime(600); //서버에서의 쿠키지속시간(초단위/10분) $auth->start(); [/code]
쿠키가 생성된 후 10분이 지나면 서버에서 gc_maxlifetime(600)에 의해 쿠키정보를 임의로 삭제하게 됩니다. 이러한 기능은 시간에 의한 자동로그아웃을 구현할 때 유용하게 사용될 수 있을 것입니다. 또 한가지는 gc_maxlifetime() 함수로 유효기간을 설정하는 것은 쿠키를 처음 생성할 때 한번만 수행하면 됩니다. 이 함수는 실제로는 쿠커에서 모두 담당하기 때문에 로인한 후 페이지 퍼미션에서는 이 함수를 수행하지 않더라도 이미 쿠커에 의해 계속 유효하게 됩니다. 따라서 쿠키퍼미션 클래스에서는 이 함수가 제공되지 않습니다.
gc_maxlifetime() 함수에서 설정할 때는 start() 함수 전에 수행하여야 합니다.

Posted by 방글24
phpsource/회원인증2001. 2. 22. 14:55
"PHP를 이용한 HTTP 인증(HTTP authentication with PHP)"에 대한 것은 잘 알고 있으리라 생각합니다. 쿠키인증 클래스는 "PHP를 이용한 HTTP 인증"를 모델링하여 작성된 클래스입니다. "PHP를 이용한 HTTP 인증"에서 수행이 어려운 로그아웃 처리를 쉽게 수행할 수 있는 기능을 가지게 될 것입니다. 마지막 접속 후 지정된 시간(기본값은 24분)이 지나면 자동으로 로그아웃하는 기능도 가지게 될 것입니다.
쿠키에 대한 일반적인 정보는 상단메뉴의 "쿠커"정보를 참조바랍니다.
활용 예제의 구성
소스코드의 전체구성을 살펴보면 아래와 같습니다.
1. 쿠키 관리용 클래스
▶ 쿠커(class.cooker.php)
2. 쿠키인증클래스
▶ 쿠키인증 클래스(class.authcook.php)
▶ 쿠키퍼미션 클래스(class.permcook.php)
3. 회원정보 관리용 클래스
▶ 회원정보 클래스(class.member.php)
4. 실험용 예제
▶ 로그인 페이지(login.php3)
▶ 회원전용 홈페이지(home.php3)
▶ 회원#1 페이지(member1.php3)
▶ 회원#2 페이지(member2.php3)
▶ 회원#3 페이지(member3.php3)
▶ 로그아웃 페이지(logout.php3)
< 예제 구성 >
쿠커(class.cooker.php)
쿠커(Cooker) 및 쿠키 암호화 클래스에 대한 정보는 메뉴 "후키라이브러리 >> 쿠커"를 참조바랍니다.
쿠키인증 클래스(class.authcook.php)
쿠키인증 클래스는 "PHP를 이용한 HTTP 인증"를 모델링하여 작성된 클래스입니다. 쿠키인증 클래스에서 쿠키를 다루기 위해 앞서 공개된 쿠커(Cooker)와 쿠키 암호화 클래스를 이용하게 됩니다. 그러니 먼저 쿠커에 대한 자료를 참조하기 바랍니다. "PHP를 이용한 HTTP 인증"은 아래와 같이 작성되는 것이 보통입니다.
[code php;gutter:false] <?php function authentication() { Header("WWW-authenticate: basic realm=\"회원 확인\""); Header("HTTP/1.0 401 Unauthorized"); echo "회원전용 서비스를 받으시려면 먼저 회원으로 가입하세요."; exit; } if (!$PHP_AUTH_USER || !$PHP_AUTH_PW) { // // 인증창에 값을 입력하지 않은 경우 다시 인증창을 띄운다. // authentication(); exit; } // // 인증창 통과하였음 // 여기에서 회원 인증을 한다. // ...... 디비 등을 이용하여 회원 인증을 위한 소스 코드 삽입 ...... if (회원인증에 실패했으면?) { authentication(); // 다시 인증창을 띄운다. exit; } // // 회원인증에 성공함 // echo "<META http-equiv='Refresh' content='0; URL=home.php3'>"; ?> [/code]
쿠키인증 클래스를 이용하여 위와 동일한(?) 기능을 할 수 있도록 작성하면 다음과 같습니다.
[code php;gutter:false] <?php require "./cooker/class.cooker.php"; // 쿠커 require "./authcook/class.authcook.php"; // 쿠키인증 클래스 $auth = new authCook("회원 확인", "회원전용 서비스를 받으시려면 먼저 회원으로 가입하세요."); $auth->start(); // 인증창을 띄운다. // // 인증창 통과하였음 // 여기에서 회원 인증을 한다. // ...... 디비 등을 이용하여 회원 인증을 위한 소스 코드 삽입 ...... if (회원인증에 실패했으면?) { $auth->start(); // 다시 인증창을 띄운다. exit; } // // 회원인증에 성공함 // echo "<META http-equiv='Refresh' content='0; URL=home.php3'>"; ?> [/code]
쿠키퍼미션 클래스(class.permcook.php)
일단 회원인증에 성공하게 되면 쿠커(Cooker)에 의해 클라이언트 쿠키영역에 정해진 양식대로 회원정보가 기록되며, 각 회원 전용 페이지에서는 기록된 회원정보를 가지고 페이지 접근 허용 여부를 결정하게 됩니다. 이를 위해 작성된 클래스가 쿠키퍼미션 클래스입니다.
[code php;gutter:false] <?php require "./cooker/class.cooker.php"; // 쿠커 require "./authcook/class.permcook.php"; // 쿠키퍼미션 클래스 $perm = new permCook("회원전용 서비스를 받으시려면 먼저 회원으로 가입하세요."); $permission_user = "user1"; $permission_type = "owner"; $perm->check($permission_type, $permission_user); // // 페이지 퍼미션을 통과하였음 // . . . ?> [/code]
회원정보 클래스(class.member.php)
회원정보 클래스의 목적은 보통 데이터베이스에 기록되어 있는 회원정보와 로그인 과정에서 취득하게 되는 회원ID와 패스워드를 비교하여 방문자가 등록된 회원인가를 확인하는 것을 도와주기 위한 것입니다. 그러나 제가 공개한 본 클래스는 쿠키인증 클래스를 실험하기 위해 임시로 작성되어 있으며 여기서는 회원에 대한 정보를 데이터베이스가 아닌 일반 배열에 담았습니다. 따라서 이 클래스를 실전에서 사용하기 위해서는 소스 코드를 대폭 수정하여 데이터베이스를 이용하여 회원정보를 관리할 수 있도록 하여야 할 것입니다. 그러니 이 클래스는 쿠키인증 클래스의 실험용 이상의 의미를 두지 마시기 바랍니다.
페이지 구성 및 회원별 접근 제한
예제 프로그램에서는 페이지 #1, #2, #3는 퍼미션 등급이 "owner"으로 설정되어 있고, 홈페이지와 로그아웃 페이지는 퍼미션 등급이 설정되어 있지 않습니다.
페이지 구성 접근이 허용된 회원
로그인 페이지 모든 방문자
홈페이지 로그인한 모든 회원
페이지 #1 로그인한 "user1" 회원
페이지 #2 로그인한 "user2" 회원
페이지 #3 로그인한 "user3" 회원
로그아웃 페이지 로그인한 모든 회원
회원정보 클래스에 저장된 회원정보
위에서 언급한 바와 같이 회원정보가 배열의 형태로 저장되어 있습니다.
사용자 이름 암호
user1 test
user2 test
user3 test

Posted by 방글24
phpsource/회원인증2001. 1. 12. 14:47
장바구니 클래스 0.0.2(2001.2.20)
  • 쿠커용 추가
  • 장바구니에 상품코드 및 상품색상으로 분류하여 주문할 수 있음
  • 쿠커용 함수 write() 추가
  • put() 함수 대신 set() 함수 사용
장바구니 클래스 0.0.1(최초 공개 버전)
  • PHP4 세션함수 또는 PHP3 세셔너용으로 작성
  • add(), put(), get(), delete() 메소드 제공

'phpsource > 회원인증' 카테고리의 다른 글

{쿠키회원인증}2.쿠키인증 클래스  (0) 2001.02.22
{쿠키회원인증}1.활용  (0) 2001.02.22
{장바구니클래스}2.사용자 함수  (0) 2001.01.12
{장바구니클래스}1.기본 구성  (0) 2001.01.12
{회원별페이지}  (0) 2000.11.21
Posted by 방글24
phpsource/회원인증2001. 1. 12. 14:40
사용자가 접근할 수 있는 메소드는 아래와 같이 5개(write 함수는 쿠커용에서만 사용하며 세셔너용에서는 사용하더라도 아무런 기능을 수행하지 않는 더미함수임)가 제공됩니다. 모든 함수는 기본적으로 상품코드를 가지고 각 상품을 다루게 됩니다. 각 상품에 대한 명칭, 가격 등과 같은 정보는 class.article.php에서 정의되어 있는 상품정보 클래스를 통하여 얻을 수 있습니다.
[code c;gutter:false] void add(strign code, strint color, int num) void set(string code, string color, int value) array get() 또는 array get(string code) 또는 mixed get(string code, string color) void delete([string code [, string color]]) void write(void) [/code]
void add(string code, string color, int num)
add() 함수는 지정된 상품코드, 상품색상의 수량을 증감시킵니다.
[code php;gutter:false] $cart->add("B001", "백색", 1); // "B001" 백색 상품의 주문수량을 1 증가시킴 $cart->add("B001", "청색", -1); // "B001" 청색 상품의 주문수량을 1 감소시킴 [/code]
void set(string code, string color, int num)
0.0.2 버전부터 put() 함수명 대신에 set() 함수명으로 접근할 수 있습니다. 이 함수는 지정된 상품코드, 상품색상에 따른 주문수량을 지정된 값으로 설정합니다. 주문수량 num 값은 0 이상의 값으로 지정하여야 합니다.
[code php;gutter:false] $cart->set("B001", "청색", 1); // "B001" 청색 상품의 주문수량을 1개로 설정함 $cart->set("B002", "흑색", 3); // "B002" 흑색 상품의 주문수량을 3개로 설정함 [/code]
array get()
매개변수를 지정하지 않으면 장바구니 배열 전체를 되돌려줍니다.
[code php;gutter:false] $cartlist = $cart->get(); if (is_array($cartlist)) { while(list($code,$v)=each($cartlist)) { while(list($color,$num)=each($v)0 { echo "$code($color)의 주문수량은 $num 개입니다.\n"; } } } [/code]
array get(string code)
매개변수로 상품코드를 지정하면 해당하는 상품코드에 대한 상품정보를 배열로 되돌려줍니다.
[code php;gutter:false] $a001 = $cart->get("A001"); if (is_array($a001)) { while(list($color,$num)=each($a001)) echo "AOO1-$color=$num\n"; } [/code]
int get(string code, string color)
지정딘 상품코드, 상품색상에 대한 주문수량을 되돌려 줍니다.
[code php;gutter:false] $nums = $cart->get("A001", "백색"); // "A001" 백색 상품의 주문수량을 되돌려줌 [/code]
void delete([string code [, string color]])
매개변수로 상품코드와 상품색상을 지정하면 해당 주문수량을 삭제합니다. 매개변수로 상품코드만 지정하면 장바구니에 저장된 해당하는 상품코드의 전체 정보를 삭제합니다. 매개변수를 지정하지 않으면 장바구니 정보 전체를 모두 삭제합니다.
[code php;gutter:false] $cart->delete("A001", "청색"); // 장바구니에서 "A001" 청색 상품의 정보를 삭제함 $cart->delete("A001"); // 장바구니에서 상품코드 "A001"의 정보를 삭제함 $cart->delete(); // 현재 사용하고 있는 장바구니를 삭제함 [/code]
void write(void)
장바구니에 저장된 상품정보를 클라이언트에 있는 쿠키파일에 저장합니다. 이 함수는 내부적으로 PHP header() 함수를 사용하기 때문에 브라우저로 출력하는 문자가 발생하기 전에 수행하여야 합니다. 이 함수는 쿠커용에서만 정상적으로 사용될 수 있는 함수입니다. 그러나 세셔너용에서 사용하더라도 아무런 문제가 생기지는 않습니다. 세셔너용에서는 어떠한 기능도 들어있지 않은 더미함수로 정의되어 있습니다. 자세한 것은 쿠커(Cooker) 정보를 참조바랍니다.
[code php;gutter:false] <?php require("./cooker/class.cooker.php"); // 쿠커 require("./cart/class.carter4cooker.php"); // 쿠커용 장바구니 클래스 require("./cart/class.article.php"); // 상품정보 클래스 $cart = new Carter; $article = new Article; switch($count) { case "add" : $cart->add($code, $color, 1); break; case "dec" : $cart->add($code, $color, -1); break; case "del" : $cart->delete($code, $color); break; default : $cart->set($code, $color, $count); } $cartlist = $cart->get(); $cart->write(); // 쿠커용에서는 여기에서 장바구니 정보를 쿠키파일에 저장함 ?> . . 브라우저 화면에 출력할 코드를 생성할 부분 . [/code]

'phpsource > 회원인증' 카테고리의 다른 글

{쿠키회원인증}1.활용  (0) 2001.02.22
{장바구니클래스}3.다운로드  (0) 2001.01.12
{장바구니클래스}1.기본 구성  (0) 2001.01.12
{회원별페이지}  (0) 2000.11.21
{회원인증에 대하여}10.전체 구성  (0) 2000.10.10
Posted by 방글24