사용자가 사이트를 디자인하고 유지 관리할 때 중요한 특정 파일이나 정보에 대한 액세스를 제한해야 하는 경우가 많습니다. 일반적으로 웹 서버에 내장된 HTTP 프로토콜을 기반으로 하는 사용자 인증 메커니즘을 사용할 수 있습니다. 방문자가 보호된 페이지를 탐색하면 클라이언트 브라우저는 사용자에게 페이지에 액세스할 수 있는 권한이 있는지 확인하기 위해 사용자의 신원을 확인하기 위해 사용자 이름과 비밀번호를 입력하라는 대화 상자 창을 표시합니다. 구현 원리를 설명하기 위해 두 가지 방법이 사용됩니다.
1. HTTP 헤더를 사용하여
헤더를 구현합니다. 헤더는 HTTP 프로토콜을 사용하여 HTML 정보를 브라우저에 전송하기 전에 서버에서 보내는 문자열입니다. HTTP는 암호로 보호된 영역에 들어가려는 사용자를 인증하기 위해 시도/응답 모델을 사용합니다. 구체적으로, 사용자가 처음으로 보호 영역에 접근하기 위해 웹 서버에 요청하면 인증 확인 프로세스가 시작되고 서버는 사용자의 신원이 확인되지 않았음을 나타내는 특수 401 헤더를 반환합니다. 위의 응답을 감지한 후 클라이언트 브라우저는 사용자에게 사용자 이름과 비밀번호를 입력하라는 대화 상자를 자동으로 표시합니다. 사용자가 입력을 완료하고 확인을 클릭하면 사용자의 식별 정보가 서버로 전송되어 확인됩니다. 사용자가 입력한 사용자 이름과 비밀번호가 유효한 경우 웹 서버는 사용자가 보호 영역에 들어갈 수 있도록 허용하고 액세스 프로세스 전반에 걸쳐 신원의 유효성을 유지합니다. 반대로, 사용자가 입력한 사용자 이름이나 비밀번호를 확인할 수 없는 경우, 클라이언트 브라우저는 계속해서 입력창을 띄워 사용자에게 올바른 정보를 다시 입력하도록 요청합니다. 사용자가 올바른 정보 위치를 입력할 때까지 전체 프로세스가 계속됩니다. 또한 사용자에게 허용되는 최대 시도 횟수를 설정할 수도 있으며, 이를 초과하면 사용자의 액세스 요청이 자동으로 거부됩니다.
PHP 스크립트에서 header() 함수를 사용하여 HTTP 헤더를 클라이언트의 브라우저에 직접 보내면 클라이언트에 사용자 이름과 비밀번호 입력 창이 자동으로 팝업되어 신원 인증 기능을 구현합니다. PHP에서는 클라이언트 사용자가 입력한 정보가 서버로 전송된 후 자동으로 $PHP_AUTH_USER, $PHP_AUTH_PW, $PHP_AUTH_TYPE 3개의 전역 변수에 저장됩니다. 이 세 가지 변수를 사용하면 데이터 파일이나 데이터베이스에 저장된 사용자 계정 정보를 기반으로 사용자의 신원을 확인할 수 있습니다.
단, $PHP_AUTH_USER 및 $PHP_AUTH_PW는 모듈로 설치된 PHP에서만 사용할 수 있다는 점을 사용자는 기억해야 합니다. 그리고 세 개의 변수 $PHP_AUTH_TYPE. 사용자가 CGI 모드에서 PHP를 사용하는 경우 확인 기능을 구현할 수 없습니다. PHP의 모듈 설치 방법은 본 섹션의 마지막 부분에 첨부되어 있습니다.
아래에서는 Mysql 데이터베이스를 사용하여 사용자의 신원을 저장합니다. 사용자의 진위 여부를 확인하려면 $PHP_AUTH_USER 및 $PHP_AUTH_PW 변수와 비교하기 위해 데이터베이스에서 각 계정의 사용자 이름과 비밀번호를 추출해야 합니다.
먼저 MySql에 데이터베이스를 생성하여 사용자 정보를 저장합니다.
데이터베이스 이름은 XinXiKu이고 테이블 이름은 user입니다. 테이블 정의는 다음과 같습니다
.
ID INT(4) NOT NULL AUTO_INCREMENT,
이름 VARCHAR(8) NOT NULL,
비밀번호 CHAR(8) NOT NULL,
기본 키(ID)
)
설명:
1. ID는 0이 아니며 자동으로 증가되는 일련번호입니다.
2. 이름은 사용자 이름이며 비워둘 수 없습니다.
3. 비밀번호는 비워둘 수 없습니다.
다음은 사용자 확인 파일 로그인입니다.php
//사용자 이름이 설정되어 있는지 확인합니다
.
if(!isset($PHP_AUTH_USER)) {
header("WWW-Authenticate:Basic realm="인증 기능"");
header("HTTP/1.0 401 인증되지 않음");
echo "인증에 실패했습니다. 네트워크 리소스를 공유할 권한이 없습니다!";
출구();
}
/*데이터베이스에 연결*/
$db=mysql_connect("localhost","루트","");
//데이터베이스 선택
mysql_select_db("XinXiKu",$db);
//사용자가 존재하는지 확인
$result=mysql_query("SELECT * FROM 사용자 여기서 이름='$PHP_AUTH_USER' 및 비밀번호='$PHP_AUTH_PW'",$db);
if ($myrow = mysql_fetch_row($result)) {
//인증 성공 후 관련 작업은 다음과 같습니다.
...
} 또 다른 {
//인증에 실패했습니다. 사용자에게 다시 입력하라는 메시지를 표시합니다.
header("WWW-Authenticate:Basic realm="인증 기능"");
header("HTTP/1.0 401 인증되지 않음");
echo "인증에 실패했습니다. 네트워크 리소스를 공유할 권한이 없습니다!";
출구();
}
?>
프로그램 설명:
프로그램에 먼저 $PHP_AUTH_USER 변수가 설정되어 있는지 확인합니다. 설정되지 않은 경우, 스크립트는 HTTP 401 오류 번호 헤더를 전송하여 클라이언트 브라우저에 인증이 필요함을 알리고 사용자에게 사용자 이름을 입력하라는 메시지를 표시합니다. 비밀번호 입력이 완료된 후, 사용자 이름과 비밀번호가 올바른지 확인하고, 정확하지 않은 경우 로그인을 허용하여 사용자 이름과 비밀번호를 입력하도록 합니다.
함수 설명:
1. isset(): 변수에 값이 할당되었는지 확인하는 데 사용됩니다. 변수 값의 존재 여부에 따라 true 또는 false를 반환합니다.
2. header(): 특정 HTTP 헤더를 보내는 데 사용됩니다. header() 함수를 사용할 때 실제 출력을 생성하는 HTML 또는 PHP 코드보다 먼저 호출해야 합니다.
3. mysql_connect(): MySQL 서버 연결을 엽니다.
4. mysql_db_query(): 쿼리 문자열(query)을 MySQL 데이터베이스로 보냅니다.
5. mysql_fetch_row(): 단일 열의 각 필드를 반환합니다.
2. 세션을 사용하여 서버 확인을 구현합니다.
인증이 필요한 페이지의 경우 Apache 서버 확인을 사용하는 것이 가장 좋습니다. 그러나 Apache 서버 확인 인터페이스는 충분히 친숙하지 않습니다. 또한 CGI 모드의 PHP와 IIS의 PHP는 Apache 서버를 사용하여 확인할 수 없습니다. 이러한 방식으로 세션을 사용하여 여러 페이지 간에 사용자의 신원을 저장하여 신원 확인을 달성할 수 있습니다.
백엔드에서는 위의 Mysql 데이터베이스를 사용하여 사용자 정보를 저장합니다.
먼저 사용자 로그인 인터페이스를 작성합니다. 파일 이름은 login.php이고 코드는 다음과 같습니다.
____________________________________________________________
<form action="login1.php">
사용자 이름:<input type="text" name="name"><br>
비밀번호 :<input type="text" name="pass"><br>
<input type="submit" value="Login">
</form>
____________________________________________________________
login1.php는 제출된 양식을 처리하며, 코드는 다음과 같습니다:
$ db=mysql_connect("로컬호스트","루트","");
mysql_select_db("XinXiKu",$db);
$result=mysql_query("SELECT * FROM 사용자 여기서 이름='$name' 및 비밀번호='$pass'",$db);
if ($myrow = mysql_fetch_row($result)) {
//사용자 등록
세션_시작();
session_register("사용자");
$user=$myrow["사용자"];
// 신원 확인 성공, 관련 작업 수행
...
} 또 다른 {
echo "인증에 실패했습니다. 네트워크 리소스를 공유할 권한이 없습니다!";
}
?>
여기서는 사용자가 후속 작업에서 **http://domainname/next.php?user=username**을 사용하여 인증을 우회할 수 있다는 점에 유의해야 합니다. 따라서 후속 작업에서는 먼저 변수가 등록되었는지 확인해야 합니다. 등록된 경우 해당 작업을 수행하고, 그렇지 않으면 불법 로그인으로 간주됩니다. 관련 코드는 다음과 같습니다.
세션_시작();
if (!session_is_registered("사용자")){
echo "인증실패, 로그인이 잘못되었습니다!";
} 또 다른 {
//관련 작업을 수행하기 위해 로그인에 성공했습니다.
...
}
?>
부록: 모듈 모드에서 PHP를 설치하는 방법
1. 먼저 mod_php4-4.0.1-pl2 파일을 다운로드합니다. [PHP4가 아니라면 빨리 업그레이드하세요!]
압축을 풀면 mod_php4.dll, mod_php4.conf, readme.txt 3개의 파일이 있습니다
. 2. 관련 파일을mod_php4.dll을 모듈 디렉터리에
복사합니다.
Apache 설치 디렉터리
에 mod_php4.conf를 복사합니다.
msvcrt.dll 파일을 Apache 설치 디렉터리에 복사합니다.
3. conf/srm.conf 파일을 열고conf/mod_php4.conf
문장을 추가합니다.
이를 수행하려면 먼저 httpd.conf에서 CGI 모드에 대한 모든 설정 문, 즉
ScripAlias /php4/ "C:/php4/"를
제거하십시오.
AddType 애플리케이션/x-httpd-php4 .php
AddType 애플리케이션/x-httpd-php4 .php3
AddType 애플리케이션/x-httpd-php4 .php4
Action application/x-httpd-php4 /php4/php.exe
PHP가 더 많은 접미사를 지원하도록 하고 싶다면 문제 없습니다. 주어진 구성 파일 mod_php4.conf는 이미 php, php3 및 php4의 세 가지 접미사를 지원합니다. 더 많은 접미사를 지원하려면 이 파일을 변경하면 됩니다. 매우 간단합니다.
4.
<?phpinfo() ?>를 사용하여 테스트합니다. Server API의 값이 cgi가 아닌 apache이고, HTTP Headers Information에 대한 정보도 있음을 알 수 있습니다.