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