2003-11-17
187 HIT
|
이번 시간에는 MySQL 을 이용한 사용자인증(User Authentication) 에 대해 알아보겠습니다. 서버측 스크립트에 Header()함수를 사용하면 웹서버에서는 Authentication Required 메시지를 클라이언트 브라우저에 보내게 되고 그러면 흔히 보는 사용자인증 대화상자가 뜨게 됩니다. 여기서 사용자가 아이디, 암호를 넣게 되면 각각 $PHP_AUTH_USER, $PHP_AUTH_PW 변수에 들어가게 되고 이 값을 가지고 MySQL에 SQL문을 날리는 방법으로 인증을 처리하게 됩니다. 일반적으로 사용되는 아파치의 기본 인증방법(.htaccess ,.htpasswd 파일을 이용하는) 은 단지 유저가 특정 디렉토리나 파일에 접근권한을 가지는가의 여부만을 판단하는데 반해 MySQL을 이용하면 사용자 별로 다른 권한레벨을 주어 인증 후 각각 다른 페이지로 연결 시켜 줄수도 있다는 장점이 있습니다. 주의 할 점은 사용자인증 기능은 PHP가 아파치 모듈로 돌아갈 때에만 가능하며 반드시 PHP 스크립트 제일 처음에 나와야 합니다. 제가 주로 사용하는 방법은 auth.inc 파일을 따로 만들어 인증이 필요한 페이지의 시작 부분에 <?php include “auth.inc” ; ?> 와 같이 추가 시켜주는 것입니다. 우선 test DB에 다음과 같이 member 라는 사용자 테이블을 만듭니다. use test ; create table member( id char(10) NOT NULL PRIMARY KEY , passwd char(10), name char(10), level int ); 그다음 각기 다른 권한을 가지는 사용자를 등록해 줍니다. insert into member values('loveme','12345','정식사용자','3'); insert into member values('user1','user1','임시사용자','2'); insert into member values('guest','guest','나그네','1'); - level 1 아이디/암호 : guest / guest - level 2 아이디/암호 : user1 / user1 - level 3 아이디/암호 : loveme / 12345 * auth.inc <?php cfunction authenticate() { Header("WWW-authenticate: basic realm=\"BBS ADMIN영역\" "); Header("HTTP/1.0 401 Unauthorized"); $title="Invalid Login"; ?> 아이디와 암호가 필요합니다! <?php exit; } if (!isset($PHP_AUTH_USER)) { authenticate(); } else { mysql_pconnect('','mysql','') or die("Unable to connect to SQL server"); // MySQL 서버 접속 mysql_select_db("test") or die("Unable to select database"); // DB 선택 $result = mysql_query("select name , level from member where id='$PHP_AUTH_USER' and passwd='$PHP_AUTH_PW' "); if (!mysql_num_rows($result)) { authenticate(); } else { $userinfo = mysql_fetch_array($result); } } ?> * auth.html <?php include "./auth.inc" ; ?> <HTML> <HEAD> <TITLE> 사용자 인증 예제 </TITLE> </HEAD> <BODY bgcolor="#2B4577" text="white" link="blue" vlink="purple" alink="red"> <?php $username = $userinfo[0] ; // auth.inc 에서 가져온 사용자 이름 $userlevle = $userinfo[1] ; // " 사용자 LEVEL echo(" <script> window.alert('어서오세요 $username 님') location.href='level$userlevle.html' </script> "); ?> </BODY> </HTML> |

