사이트의 섹션 중 하나를 제한적이지만 무한한 사람들에게 제공해야 하는 경우 가장 쉬운 방법은 사용자를 등록하고 권한을 부여하는 것입니다. 사용자에게 권한을 부여하는 방법에는 여러 가지가 있습니다. 웹 서버 도구와 프로그래밍 언어 도구를 모두 사용할 수 있습니다. PHP 세션을 사용하는 경우에 대해 이야기하겠습니다.

아마도 당신은 더보고 싶어 현대적인 방법그런 형태를 만드는 것. 나는 여전히 완전한 현대적이고 최신의 프레젠테이션에 대한 계획이 있지만 양식이 피드백 PHP에서 객체 지향 트릭을 사용하여 빌드할 수 있습니다.

우선, 다음에 취할 모든 단계에 대해 논의해 보겠습니다. 우리에게 정말로 필요한 것은 무엇입니까? 사용자를 등록하고, 사용자에게 권한을 부여하고, 권한 부여 후 사용자를 어딘가로 리디렉션하는 스크립트가 필요합니다. 또한 승인되지 않은 사용자의 액세스로부터 보호되는 페이지를 만들어야 합니다. 등록 및 승인을 위해 다음을 생성해야 합니다. HTML 양식. 등록된 사용자에 대한 정보를 데이터베이스에 저장합니다. 이것은 여전히 ​​DBMS 연결 스크립트가 필요하다는 것을 의미합니다. 모든 작업은 우리가 직접 작성하는 기능을 수행합니다. 우리는 이러한 기능을 별도의 파일에 저장할 것입니다.

따라서 다음 파일이 필요합니다.

  • DBMS에 대한 연결;
  • 사용자 정의 기능;
  • 권한 부여;
  • 등록;
  • 보안 페이지;
  • 사용자 종료 스크립트;
  • 사용자의 승인 상태를 확인하는 스크립트;
  • 페이지의 가장 단순한 디자인을 위한 스타일 시트.

데이터베이스에 해당 테이블이 없으면 이 모든 것이 의미가 없습니다. DBMS 관리 도구(PhpMyAdmin 또는 명령줄, 둘 중 더 편리한 것) 다음 쿼리를 실행합니다.

CREATE TABLE `users` (`id` int(11) NOT NULL AUTO_INCREMENT, `login` char(16) NOT NULL, `password` char(40) NOT NULL, `reg_date` 타임스탬프 NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY(` id`)) ENGINE=MyISAM 기본 CHARSET=utf8 AUTO_INCREMENT=1 ;

스크립트 파일의 이름을 다음과 같이 지정합니다(모두 동일한 디렉토리에 있음).

  • 데이터베이스.php
  • 기능.php
  • 로그인.php
  • 등록.php;
  • 인덱스.php;
  • 로그아웃.php;
  • 체크인증.php;
  • 스타일.css

각각의 목적을 이해하셨으리라 믿습니다. DBMS 연결 스크립트부터 시작하겠습니다. 당신은 이미 그를 보았다. 이 스크립트 코드를 database.php 파일에 저장하기만 하면 됩니다. 우리는 functions.php 파일에서 커스텀 함수를 선언할 것입니다. 모든 것이 어떻게 작동합니까? 승인되지 않은 사용자가 보호된 index.php 문서에 액세스하려고 시도하면 시스템은 사용자가 승인되었는지 확인하고 사용자가 승인되지 않은 경우 승인 페이지로 리디렉션됩니다. 승인 페이지에서 사용자는 승인 양식을 볼 수 있어야 합니다. 해봅시다.

사용자 권한 부여

등록하다.

이제 우리의 양식에 어떤 양식이 주어져야 합니다. 동시에 다른 요소에 대한 규칙을 정의합니다. 나는 앞을 내다보고 스타일 시트의 내용을 완전히 알려 드리겠습니다.

/* style.css 파일 */ .row ( margin-bottom:10px; width:220px; ) .row 레이블 ( display:block; font-weight:bold; ) .row input.text ( font-size:1.2em; padding:2px 5px; ) .to_reg ( font-size:0.9em; ) .instruction ( font-size:0.8em; color:#aaaaaa; margin-left:2px; cursor:default; ) .error ( color:red; 여백-왼쪽:3px; )

모든 것이 올바르게 완료되면 브라우저에 다음이 있어야 합니다.

물론 아직 등록된 사용자가 한 명도 없으며, 로그인을 하기 위해서는 회원가입이 필요합니다. 등록 양식을 만들어 봅시다.

사용자 등록

" />

HTML 코드에 PHP 변수가 있다는 것을 눈치채셨을 것입니다. 양식 텍스트 필드 속성의 내용, 오류 컨테이너의 내용입니다. 그러나 우리는 이러한 변수를 초기화하지 않았습니다. 그걸하자.

사용자 등록

" />
사용자 이름은 라틴 문자, 숫자, 기호 "_", "-", "."만 포함할 수 있습니다. 사용자 이름 길이는 4자 이상 16자 이하여야 합니다.
비밀번호에는 라틴 문자, 숫자, 기호 "_", "!", "(", ")"만 사용할 수 있습니다. 비밀번호는 6자 이상 16자 이하여야 합니다.
이전에 입력한 비밀번호를 반복

양식 태그의 작업 속성에 지정된 매개변수가 없습니다. 이 경우 양식 데이터가 제출되면 전송된 동일한 스크립트에서 처리됩니다. 따라서 양식 데이터를 처리하는 코드를 작성해야 합니다. 그러나 먼저 그것들을 처리하는 알고리즘에 대해 논의합시다.

로그인 및 비밀번호 필드가 비어 있지 않아야 합니다. 그런 다음 요구 사항을 준수하는지 로그인을 확인해야 합니다. 암호도 설명된 요구 사항을 충족해야 하며 다시 지정된 암호와 일치해야 하며 또한 동일해야 합니다. 이러한 조건 중 하나라도 충족되지 않으면 양식 데이터 처리를 종료하고 오류 메시지 배열에 적절한 경고를 작성하여 사용자에게 표시해야 합니다. 사용자의 편의를 위해 사용자가 입력한 로그인(사용자가 지정한 경우)을 저장하고 해당 값을 $fields 배열에 기록합니다.

모든 것이 정상이면 registration.php 문서를 참조하여 브라우저 창에서 다음과 같이 표시되어야 합니다.

이제 사용자가 등록 버튼을 클릭하고 양식 필드를 채우지 않았다고 가정해 보겠습니다. 우리 알고리즘에 따르면 로그인과 비밀번호는 비워둘 수 없습니다. 이 조건이 충족되지 않으면 등록이 불가능합니다. 현재 시나리오에서 양식 데이터 처리가 발생한다는 점을 염두에 둡니다. 따라서 적절한 검사를 추가하여 코드를 변경해야 합니다. 다음 점검 사항에 대해 즉시 논의해 보겠습니다. 로그인과 비밀번호를 모두 입력한 경우 지정된 요구 사항을 준수하는지 확인해야 합니다. 로그인과 비밀번호를 확인하기 위해 functions.php 파일에 사용자 함수를 생성합니다.

/** * functions.php * 사용자 정의 함수가 있는 파일 */ // 연결 매개변수가 있는 파일을 DBMS에 연결 require_once("database.php"); // 사용자 이름 확인 function checkLogin($str) ( // 가능한 오류 메시지와 함께 변수 초기화 $error = ""; // 로그인 문자열이 없으면 오류 메시지 반환 if(!$str) ( $error = " 사용자 이름을 입력하지 않았습니다."; return $error; ) /** * 정규식을 사용하여 사용자 이름 확인 * 로그인은 4자 이상, 16자 이하 * 라틴 문자, 숫자, * "_", "-", "." 문자가 될 수 있습니다. */ $pattern = "/^[-_.a-z\d](4,16)$/i"; $result = preg_match($pattern, $ str) ; // 검사가 실패하면 오류 메시지를 반환합니다. if(!$result) ( $error = "사용자 이름에 잘못된 문자가 있거나 사용자 이름이 너무 짧습니다(긴)"; return $error; ) // 모든 경우 괜찮으면 true를 반환 return true; ) // 사용자 비밀번호 확인 function checkPassword($str) ( // 에러 메시지가 있을 수 있는 변수 초기화 $error = ""; // 누락된 경우 로그인과 함께 문자열을 입력하면 오류 메시지를 반환합니다. if(!$str) ( $error = "암호를 입력하지 않았습니다"; 반환 $ 오류; ) /** * 정규식을 사용하여 사용자의 비밀번호를 확인합니다. * 비밀번호는 6자 이상, 16자 이하여야 합니다. * 라틴 문자, 숫자, * 문자 "_", "!", "를 포함할 수 있습니다. (", ")" */ $pattern = "/^[_!)(.a-z\d](6,16)$/i"; $result = preg_match($pattern, $str); // 체크하면 실패, 반환 오류 메시지 if(!$result) ( $error = "유효하지 않은 사용자 암호 또는 암호가 너무 짧음(긴)"; return $error; ) // 모든 것이 정상이면 true를 반환 return true; )

이제 선언한 기능을 사용하려면 registration.php 파일을 수정해야 합니다. 등록 버튼이 클릭되었는지 확인하는 조건을 스크립트에 추가합니다. 이 조건 내에서 로그인 및 암호 확인이 시작됩니다. 검사 중 하나라도 실패하면 양식을 다시 렌더링하고 오류 메시지를 표시합니다. 오류가 없으면 등록 양식이 더 이상 표시되지 않는 동안 사용자를 등록하고 사용자에게 등록 성공을 알리고 header() 함수를 사용하여 승인 양식으로 리디렉션합니다.

시스템에 성공적으로 등록되었습니다. 이제 로그인 페이지로 리디렉션됩니다. 이것이 발생하지 않으면 직접 링크를 통해 이동하십시오.

"; header("Refresh: 5; URL = login.php"); ) // 그렇지 않으면 사용자에게 오류를 알립니다. else ( $errors["full_error"] = $reg; ) ) ) ?> 사용자 등록
" />
사용자 이름은 라틴 문자, 숫자, 기호 "_", "-", "."만 포함할 수 있습니다. 사용자 이름 길이는 4자 이상 16자 이하여야 합니다.
비밀번호에는 라틴 문자, 숫자, 기호 "_", "!", "(", ")"만 사용할 수 있습니다. 비밀번호는 6자 이상 16자 이하여야 합니다.
이전에 입력한 비밀번호를 반복

스크립트에서 하나의 새로운 기능인 registration() 을 발견했을 것입니다. 아직 발표하지 않았습니다. 그걸하자.

// 사용자 등록 함수 function registration($login, $password) ( // 에러 메시지가 있는 변수 초기화 $error = ""; // 로그인 문자열이 없으면 에러 메시지 반환 if(!$login) ( $ error = "로그인이 지정되지 않음"; return $error; ) elseif(!$password) ( $error = "비밀번호가 지정되지 않음"; return $error; ) // 사용자가 이미 등록되어 있는지 확인 // DBMS connect() ; // 쿼리 문자열 작성 $sql = "SELECT `id` FROM `users` WHERE `login`="" . $login . """; // 데이터베이스 쿼리 만들기 $query = mysql_query($ sql) or die( ""); // 이 로그인을 사용하는 사용자의 수를 확인합니다. 적어도 하나가 있으면 // 오류 메시지를 반환합니다. if(mysql_num_rows($query) > 0) ( $error = "The 지정된 로그인을 가진 사용자가 이미 등록되어 있습니다."; return $ error; ) // 해당 사용자가 없으면 등록합니다. // 쿼리 문자열을 작성합니다. $sql = "INSERT INTO `users` (`id`,`login`, `비밀번호`) 값(NULL, "" . $login . " ","" . $비밀번호. "")"; // 데이터베이스에 쿼리하기 $query = mysql_query($sql) or die("

사용자를 추가할 수 없습니다: " . mysql_error() . ". " . __LINE__ . " 줄에서 오류가 발생했습니다.

"); // DBMS와의 연결을 끊는 것을 잊지 마세요. mysql_close(); // 사용자 등록에 성공하면 true를 반환합니다. return true; )

모든 것이 정상이면 사용자가 등록됩니다. 양식을 테스트할 수 있습니다. 동일한 로그인으로 사용자를 등록해 보십시오. 등록에 성공하면 사용자는 승인 양식으로 리디렉션됩니다. 이전에는 이 양식을 표시하기 위해 단순히 마크업을 만들었습니다. action 속성에 매개변수가 지정되지 않았으므로 양식에서 제출한 데이터는 동일한 스크립트에서 처리됩니다. 따라서 처리할 코드를 작성하고 이를 login.php 문서에 추가해야 합니다.

사용자 권한 부여

;">

시스템에 등록되지 않은 경우 등록하십시오.

이제 인증 스크립트에 또 다른 익숙하지 않은 함수인 authorization() 이 있다는 것을 눈치채셨을 것입니다. 이 기능은 데이터베이스에 동일한 로그인과 비밀번호를 가진 등록된 사용자가 있는지 먼저 확인하여 사용자를 인증해야 합니다. 이러한 사용자가 없으면 인증이 중단되고 화면에 실패 메시지가 표시됩니다. 확인이 성공하면 authorization() 함수가 세션을 시작하고 사용자의 로그인 및 비밀번호 값을 세션에 쓰고 스크립트에 권한 부여 성공을 알리고 스크립트는 사용자를 보안 리소스 페이지로 리디렉션합니다.

/** * 사용자 인증 기능. * 사용자 인증은 * PHP 세션을 사용하여 수행됩니다. */ function authorization($login, $password) ( // 가능한 오류 메시지와 함께 변수 초기화 $error = ""; // 로그인 문자열이 없으면 오류 메시지 반환 if(!$login) ( $error = " 로그인이 지정되지 않음"; return $error; ) elseif(!$password) ( $error = "암호가 지정되지 않음"; return $error; ) // 사용자가 이미 등록되어 있는지 확인 // DBMS에 연결 connect( ); // 등록된 사용자 중 해당 사용자가 있는지 확인 // 쿼리 문자열 작성 $sql = "SELECT `id` FROM `users` WHERE `login`="".$login."" AND `password`="".$password ."""; // 쿼리 실행 $query = mysql_query($sql) or die("

쿼리를 실행할 수 없습니다: " . mysql_error() . ". " . __LINE__ . " 줄에서 오류가 발생했습니다.

"); // 해당 데이터를 가진 사용자가 없으면 오류 메시지 반환 if(mysql_num_rows($query) == 0) ( $error = "지정된 데이터를 가진 사용자가 등록되지 않았습니다."; return $error; ) // 사용자가 존재하는 경우 세션 시작 session_start(); // 사용자의 로그인 및 비밀번호를 여기에 기록 // 이를 위해 슈퍼글로벌 어레이 $_SESSION $_SESSION["login"] = $login; $ _SESSION["password"] = $password; // 데이터베이스 연결을 닫는 것을 잊지 마세요. mysql_close(); // 사용자 인증 성공을 보고하려면 true를 반환합니다. return true; )

사용자가 보안 페이지에 들어갈 때 인증 데이터의 정확성을 확인해야 합니다. 이를 위해서는 사용자 정의 함수가 하나 더 필요합니다. 이를 checkAuth() 라고 합시다. 그 임무는 우리 데이터베이스에 저장된 데이터로 사용자의 인증 데이터를 확인하는 것입니다. 데이터가 일치하지 않으면 사용자는 인증 페이지로 리디렉션됩니다.

Function checkAuth($login, $password) ( // 로그인이나 비밀번호가 없으면 false 반환 if(!$login || !$password) return false; // 해당 사용자가 등록되어 있는지 확인 // DBMS에 접속 connect(); // 쿼리 문자열 작성 $sql = "SELECT `id` FROM `users` WHERE `login`="".$login."" AND `password`="".$password."""; // 쿼리 실행 $ query = mysql_query($sql) or die("

쿼리를 실행할 수 없습니다: " . mysql_error() . ". " . __LINE__ . " 줄에서 오류가 발생했습니다.

"); // 해당 데이터를 가진 사용자가 없으면 false를 반환 if(mysql_num_rows($query) == 0) ( return false; ) // 데이터베이스 연결을 닫는 것을 잊지 마십시오. mysql_close(); // 그렇지 않으면 true를 반환합니다. return true; )

이제 사용자가 보안 페이지에 도착했으므로 인증 데이터 유효성 검사 기능을 호출해야 합니다. 호출 및 검사 스크립트를 별도의 checkAuth.php 파일에 배치하고 공개 액세스를 위해 닫힐 페이지에 연결합니다.

/** * 사용자 인증을 확인하기 위한 스크립트 */ // 인증된 사용자의 로그인과 비밀번호를 추출할 세션을 시작합니다. session_start(); // 사용자 정의 함수가 있는 파일을 포함합니다. require_once("functions.php"); /** * 사용자가 로그인했는지 확인하려면 * 사용자 이름과 비밀번호에 대한 레코드가 데이터베이스에 있는지 확인해야 합니다. 이를 위해 사용자 정의 기능 *을 사용하여 승인된 사용자의 데이터가 정확한지 확인합니다. * 이 함수가 false를 반환하면 권한이 없는 것입니다. * 승인이 없으면 사용자를 승인 페이지로 리디렉션합니다. */ // 세션에 로그인 및 비밀번호 데이터가 모두 포함되어 있으면 // 확인 if(isset($_SESSION["login"]) && $_SESSION["login"] && isset($_SESSION["password" ]) && $_SESSION["password"]) ( // 기존 데이터의 유효성 검사가 실패한 경우 if(!checkAuth($_SESSION["login"], $_SESSION["password"])) ( // 사용자를 로그인 페이지 헤더로 리디렉션 ("location: login.php"); // 스크립트 실행을 종료합니다. exit; ) ) // 로그인이나 사용자 비밀번호에 대한 데이터가 없으면 // 권한이 없는 것으로 간주하고 user // 인증 페이지로 이동 else ( header("location: login.php"); // 스크립트 실행 중지 exit; )

이제 보안 페이지에 대한 코드를 생성해 보겠습니다. 그것은 꽤 간단합니다.

사용자 권한 부여 및 등록

승인에 성공했습니다.

보안 페이지에 액세스했습니다. 로그아웃할 수 있습니다.

보시다시피 보호된 문서에는 checkAuth.php라는 파일 하나만 포함되어 있습니다. 다른 모든 파일은 다른 시나리오에 포함됩니다. 따라서 우리 코드는 부피가 커 보이지 않습니다. 우리는 사용자의 등록 및 권한 부여를 구성했습니다. 이제 사용자가 로그아웃하도록 허용해야 합니다. 이를 위해 logout.php 파일에 스크립트를 생성합니다.

/** * 사용자 로그아웃 스크립트. 사용자는 세션을 통해 * 권한이 부여되므로 사용자 이름과 암호는 * $_SESSION 슈퍼글로벌 어레이에 저장됩니다. 시스템에서 * 로그아웃하려면 $_SESSION["login"] 및 $_SESSION["password"] 배열의 값을 * 파괴하고 * 그 후에 사용자를 로그인 페이지로 리디렉션합니다 */ // 세션을 시작해야 합니다. session_start(); 설정되지 않음($_SESSION["로그인"]); 설정되지 않음($_SESSION["비밀번호"]); header("위치: 로그인.php");

사용자 등록, 권한 부여 및 확인을 위한 스크립트가 준비되었습니다. 자신을 위해 사용하고 필요에 맞게 보완하고 수정할 수 있습니다. 질문이 있는 경우 댓글에서 질문할 수 있습니다. 여기에서 논의된 모든 파일을 하나의 아카이브로 다운로드할 수 있습니다.

추신 객체지향 코드를 작성하는 것이 더 낫다는 것을 알고 있으며, 암호를 평문으로 전송 및 저장하는 것은 가치가 없으며, 데이터베이스에 입력된 정보를 먼저 확인해야 한다는 것을 알고 있습니다. 알아요. 나는 여기에서 이것에 대해 이야기하지 않을 것입니다.

개인 웹 서버 서비스의 일부로 계정에 호스팅된 사이트는 기본 웹 서버뿐만 아니라 해당 프로세스가 사이트에 대한 요청을 처리할 준비가 된 자체 Apache 웹 서버 인스턴스에서도 시작할 수 있습니다.

요청 처리를 최적화하는 것 외에도 개인 웹 서버를 사용하면 일반 웹 서버에서 사용할 수 없는 소프트웨어를 사용할 수 있습니다. PHP 가속기, 1C-Bitrix CMS에서 관리하는 프로젝트의 성능 향상을 위한 종합 솔루션 및 PHP 스크립트 디버깅 도구.

이 서비스는 현재 모든 요금제에서 사용할 수 있으며 호스팅 제어판의 "웹 서버" 섹션에서 연결할 수 있습니다.

작동 원리


호스팅 기술 사이트에는 2단계 웹 서버 구성이 있습니다. Nginx의 요청을 수락한 일반 Apache 웹 서버는 강제로 새 자식 프로세스를 생성하고 요청이 처리되면 종료해야 합니다.

개인 웹 서버는 계정과 기본 Apache 프로세스의 상호 작용을 크게 단순화합니다. 특정 수의 개인 웹 서버 프로세스는 항상 호스팅 계정 사용자 이름으로 실행되며 "바쁨" 또는 "한가함"의 두 가지 상태만 있습니다.

개인 웹 서버의 프로세스는 선택한 요금제에 의해 결정된 금액으로 사이트에 대한 요청을 처리하는 데 관여합니다. SSH를 통해 호스팅 계정에 연결할 때 콘솔의 최상위 유틸리티를 사용하여 개인 웹 서버 프로세스가 요청을 수신하고 실행한 다음 해제하는 방법을 직접 볼 수 있습니다.

기능

  • 일반 공유 호스팅 계정에서 사용할 수 없는 추가 모듈로 Apache 웹 서버를 실행합니다.
  • 제어판에서 개인 웹 서버 다시 시작.
  • Zend OPCache, APC, xCache 및 eAccelerator와 같은 다양한 CMS의 작업 속도를 크게 높이는 PHP 가속기를 사용합니다.
  • PHP 확장 관리: Zend Optimizer , ionCube Loader , xDebug .
  • CMS의 요구 사항을 충족하는 PHP 환경을 설정하여 CMS 1C-Bitrix의 제어 하에 프로젝트 최적화.
  • 요청 프로세스가 항상 실행되도록 함으로써 일반 웹 서버보다 더 나은 성능을 제공합니다.

중간 및 높은 트래픽이 있는 심각한 프로젝트 또는 비표준 환경 설정 및 고급 사이트 관리 기능이 필요한 프로젝트를 호스팅하는 경우 "개인 웹 서버" 서비스를 사용하는 것이 좋습니다.

웹 서버 버전 관리

PHP

PHP(하이퍼텍스트 전처리기)- 가장 유명하고 널리 퍼진 웹 애플리케이션 개발 언어. PHP 버전은 개인 웹 서버 관리를 통해 설정됩니다(5.2부터 7.1까지 사용 가능). 대부분의 CMS 및 확장 요구 사항을 충족하는 권장 PHP 버전은 PHP 5.6입니다. 현재 버전 목록은 적시에 업데이트됩니다.

uWSGI(파이썬)

WSGI(웹 서버 게이트웨이 인터페이스)서버 측에서 실행되는 Python 프로그램과 Apache 웹 서버 자체 간의 인터페이스에 널리 사용되는 표준입니다. Python으로 작성된 프로젝트에 필요합니다.

노드.js

노드.js- JavaScript 코드를 실행하기 위한 소프트웨어 플랫폼. Node.js를 사용하면 JavaScript가 API를 통해 장치와 상호 작용하고, 다른 언어로 외부 라이브러리를 연결하고, JavaScript 코드에서 장치에 대한 호출을 제공할 수 있습니다.

PHP 가속기 사용

PHP 가속기는 다음에 호출될 때 빠른 실행을 위해 컴파일된 PHP 스크립트 코드를 메모리에 저장하는 확장입니다. 이를 통해 PHP 스크립트 실행 속도를 크게 높이고 이에 필요한 웹 서버 리소스를 줄일 수 있습니다(일부 추정에 따르면 5-20배).

PHP가 작동하는 일반적인 방식에서 각 스크립트는 실행 전에 기계어로 컴파일되어야 하고 그 다음에 실행되어야 합니다. 컴파일은 스크립트에 액세스할 때마다 발생합니다. 즉, 페이지가 표시될 때마다 스크립트 컴파일이 다시 시작됩니다. 스크립트를 컴파일하는 데 시간과 CPU 리소스가 필요합니다. PHP 가속기는 스크립트의 컴파일된 버전을 RAM에 저장합니다. 따라서 스크립트에 대한 후속 호출에서 컴파일이 필요하지 않으며 PHP는 즉시 기계어 코드를 실행하기 시작합니다. 캐싱은 CPU 리소스를 절약하고 페이지를 렌더링하는 데 걸리는 시간을 줄입니다.

주요 기능인 스크립트 캐싱 외에도 가속기는 나중에 빠른 액세스를 위해 RAM에 임의의 변수를 저장할 수 있는 기능을 스크립트에 제공합니다. 많은 CMS(콘텐츠 관리 시스템)의 페이지 캐싱 메커니즘은 이 기능을 기반으로 하므로 작업 속도가 크게 빨라집니다.

개인 웹 서버를 사용할 때 PHP 스크립트의 캐싱을 제공하는 4개의 가속기를 사용할 수 있습니다.

젠드 OPCache

젠드 OPCache- 컴파일된 스크립트(opcode)를 RAM에 캐싱하고 추가 최적화를 적용하여 PHP 언어로 사이트 작업 속도를 높입니다. 이 가속기의 응용 프로그램을 테스트한 결과 PHP 5.6과 함께 대부분의 CMS에서 가장 최적의 결과가 나타났습니다.

APC

APC(대체 PHP 캐시)- PHP 스크립트의 결과를 캐싱하기 위한 오픈 소스 소프트웨어. APC 캐셔를 사용하여 Joomla, WordPress, Drupal, UMI.CMS와 같은 인기 있는 CMS에서 생성된 사이트의 성능을 향상시키는 것이 좋습니다. PHP 5.6 및 7.0은 APCu 및 APCu-bc 가속기 모듈을 지원합니다.

e액셀러레이터

e액셀러레이터- 액셀러레이터, 옵티마이저 및 언패커의 기능을 수행하며 동적 콘텐츠 캐싱 기능이 내장되어 있습니다. CMS 제조업체의 대표자들과 함께 실시한 테스트 결과에 따르면 eAccelerator는 CMS "1C-Bitrix: Site Management" 및 인기 있는 HostCMS와 함께 사용하는 것이 좋습니다.

xCache

xCache- 고부하 프로젝트에 효과적입니다. xCache 가속기는 제조업체에서 권장하는 CMS를 사용할 때만 사용할 수 있습니다.

액셀러레이터를 활성화하면 계정이 데이터 캐싱을 위한 추가 메모리 영역을 사용하게 됩니다. 사용 가능한 메모리 양은 요금제에 따라 결정되며 사이트의 관련 섹션에 표시됩니다.

PHP 모듈 및 확장

젠드옵티마이저

젠드 옵티마이저- Zend Technologies Ltd의 애플리케이션 Zend Optimizer 확장은 Zend Encoder 및 Zend SafeGuard Suite로 인코딩된 스크립트를 실행하는 데 사용되는 서버 측 모듈로 속도를 크게 향상시킵니다. PHP 5.2에서만 사용할 수 있습니다.

이온큐브 로더

이온큐브 로더- ionCube 인코더 기술을 사용하여 인코딩된 소스 코드를 디코딩하는 데 필요한 소프트웨어입니다. 전체적으로 ionCube 유틸리티 세트(Encoder 및 Loader)를 사용하면 PHP 소스 코드를 인코딩, 난독화 및 라이선스할 수 있습니다.

x디버그

xdebug- 숙련된 개발자가 사이트 스크립트를 디버그하는 데 필요한 오픈 소스 소프트웨어. 리소스 집약적인 xDebug 유틸리티를 포함하면 브라우저에서 사이트에 액세스하는 것부터 완료된 페이지를 수신하는 것까지 내부 스크립트 실행, SQL 쿼리 생성, 제3자에 대한 사이트 액세스에 이르기까지 모든 작업이 기록되는 로깅 가능성이 구현됩니다. 파티 자원 등

"1C-Bitrix" 최적화

인기 있는 콘텐츠 관리 시스템 "1C-Bitrix"에는 멀티바이트 문자열 설정을 포함하여 호스팅 사이트에 대한 여러 시스템 요구 사항이 있습니다. 이 설정은 최신 버전의 PHP에서 php.ini 파일을 통해서만 변경되어야 합니다. 숙련된 개발자와 초보 사용자 모두 1C-Bitrix Optimization 목록에서 필요한 버전을 선택하여 mbstring.func_overload 함수 오버로드 메커니즘과 지원되는 mbstring.internal_encoding 문자 인코딩을 구성할 수 있습니다.

1C-Bitrix에서 제어하는 ​​사이트의 성능을 테스트한 결과 ZendOPCache 가속기를 PHP 5.6과 함께 사용하여 권장 캐싱을 사용할 때 최상의 결과를 얻었습니다.

설정을 적용하려면 원하는 설정을 적용하고 Personal Web Server를 다시 시작해야 합니다.

트랙백 (0)

업데이트 날짜: 2018-03-12

게시일: 2016-12-21

시간이 지남에 따라 PHP는 보안 응용 프로그램의 개발을 촉진하는 기능을 추가하고 안전하지 않은 코드를 쉽게 작성할 수 있도록 하는 기능을 더 이상 사용하지 않거나 제거했습니다.

이 튜토리얼을 읽고 PHP 보안 중심 기능을 활용하고 jQuery를 사용하여 AJAX 요청을 보내고 부트스트랩을 사용하여 다른 프레임워크를 사용하는지 여부에 관계없이 작동할 수 있는 빠르고 멋진 사용자 인터페이스를 제공하는 최신 로그인 및 등록 시스템을 만드는 방법을 배우십시오. 아니다.



질문이나 의견이 있는 경우 이 기사 또는 해당 문서에 의견으로 메시지를 게시할 수 있습니다.

변경 로그

2017-03-27: 작곡가 도구를 사용하여 더 많은 다운로드 및 설치 정보를 추가했습니다.

2017-01-01: 2017년에도 이러한 보안 관행이 계속 유지되고 있음을 반영하기 위해 기사를 업데이트했습니다.




댓글을 게시하려면 등록된 사용자이거나 로그인해야 합니다.

귀하의 계정으로 즉시 로그인:

좋은 하루 친구! PHP에서 사용자 등록을 살펴보겠습니다. 먼저 사용자 등록 조건을 정의하겠습니다.

  • 암호는 알고리즘을 사용하여 암호화됩니다. MD5
  • 비밀번호는 "소금"입니다.
  • 로그인 바쁜 확인
  • 문자로 사용자 활성화.
  • 데이터의 기록 및 저장 DBMS MySQL

이 스크립트를 작성하려면 사용자 등록이 무엇인지 이해해야 합니다. 사용자 등록은 실제 사용자 데이터의 수집, 데이터의 처리 및 저장입니다.

간단히 말해서 등록은 우리의 경우 사용자에게 권한을 부여할 수 있는 특정 데이터의 기록 및 저장일 뿐입니다. 이것이 로그인 및 비밀번호입니다.

권한 부여 - 특정 개인 또는 개인 그룹에 특정 작업을 수행할 수 있는 권한을 부여하고 이러한 작업을 수행하려고 할 때 이러한 권한을 확인하는 프로세스입니다. 간단히 말해서 승인을 통해 사이트의 특정 콘텐츠에 대한 액세스를 제한할 수 있습니다.

인증으로 로그인을 구현하기 위한 스크립트 디렉토리 구조를 살펴보겠습니다. 스크립트를 논리적 부분으로 나눌 필요가 있습니다. 등록 및 권한 부여 모듈을 별도의 디렉토리에 배치했습니다. 또한 데이터베이스 연결을 별도의 디렉터리에 배치합니다. MySQL, 사용자 정의 기능이 있는 파일, 스타일 파일 CSS그리고 우리의 템플릿 HTML. 이 구조를 사용하면 스크립트를 빠르게 탐색할 수 있습니다. 많은 모듈 등이 있는 큰 사이트가 있다고 상상해 보십시오. 그리고 순서가 없으면 그런 혼란 속에서 무언가를 찾기가 매우 어려울 것입니다.

우리는 모든 데이터를 DBMS MySQL, 등록 데이터를 저장할 작은 테이블을 만들어 보겠습니다.

먼저 데이터베이스에 테이블을 생성해야 합니다. 테이블을 호출하자 bez_reg어디 베즈는 테이블 접두어이고 등록테이블 이름.

테이블 구조: bez_reg

-- -- `bez_reg` 테이블 구조 -- CREATE TABLE IF NOT EXISTS `bez_reg` (`id` int(11) NOT NULL AUTO_INCREMENT, `login` varchar(200) NOT NULL, `pass' varchar(32) NOT NULL , `소금` varchar(32) NOT NULL, `active_hex` varchar(32) NOT NULL, `status` int(1) NOT NULL, PRIMARY KEY (`id`)) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

이제 추가 작업을 위해 기본 스크립트를 작성해 보겠습니다.

INDEX.PHP 파일

CONFIG.PHP 파일

"); ?>

파일 404.HTML

오류 404

오류 404

페이지에 404 오류가 있습니다.

반품

BD.PHP 파일

INDEX.HTML 파일

활성화 이메일로 PHP MySQL 사용자 등록

FUNCT.PHP 파일

"."\n"; if(is_array($data)) ( foreach($data as $val) $err .= "

  • ".$val."
  • "."\n"; ) 그렇지 않으면 $err .= "
  • ".$데이터."
  • "."\n"; $err .= ""."\n"; return $err; ) /**간단한 MySQL 쿼리 래퍼 * @param string $sql */ function mysqlQuery($sql) ( $res = mysql_query($sql); /* 확인 결과 다음과 같습니다. 실제 쿼리가 MySQL로 전송되고 error.*/ if(!$res) ( $message = "Bad query: " . mysql_error() . "\n"; $message .= "Entire query: " . $ sql; die($message); ) return $res; ) /**간단한 소금 생성기 * @param string $sql */ function salt() ( $salt = substr(md5(uniqid()), - 8); return $소금; )

    등록 작성을 시작하겠습니다. 우선 사용자가 처리를 위해 데이터를 입력할 수 있도록 등록 양식 템플릿을 만들어야 합니다. 다음으로 사용자가 입력한 데이터의 정확성을 검사하는 양식 처리기 자체를 작성해야 합니다. 데이터가 성공적으로 확인되면 데이터베이스에 기록하고 사용자에게 이메일을 보내 계정을 활성화합니다.

    REG.PHP 파일

    성공적으로 등록했습니다! 계정을 활성화하세요!!"; //계정 활성화 if(isset($_GET["key"])) ( //키 확인 $sql = "SELECT * FROM `". BEZ_DBPREFIX ."reg` WHERE `active_hex` = "". escape_str ( $_GET["key"]) ."""; $res = mysqlQuery($sql); if(mysql_num_rows($res) == 0) $err = "활성화 키가 잘못되었습니다!"; //오류 확인 사용자에게 표시 if(count($err) > 0) echo showErrorMessage($err); else ( //사용자의 주소 가져오기 $row = mysql_fetch_assoc($res); $email = $row["login"]; //계정 사용자 활성화 $sql = "UPDATE `".BEZ_DBPREFIX ."reg` SET `status` = 1 WHERE `login` = "".$email ."""; $res = mysqlQuery($sql); / /활성화 이메일 보내기 $title = "(!LANG:http://website의 계정이 성공적으로 활성화되었습니다."; $message = "Поздравляю Вас, Ваш аккаунт на http://сайт успешно активирован"; sendMessageMail($email, BEZ_MAIL_AUTOR, $title, $message); /*Перенаправляем пользователя на нужную нам страницу*/ header("Location:". BEZ_HOST ."less/reg/?mode=reg&active=ok"); exit; } } /*Если нажата кнопка на регистрацию, начинаем проверку*/ if(isset($_POST["submit"])) { //Утюжим пришедшие данные if(empty($_POST["email"])) $err = "Поле Email не может быть пустым!"; else { if(!preg_match("/^!} [이메일 보호됨](+\.)+(2,6)$/i", $_POST["email"])) $err = "이메일이 잘못 입력되었습니다."\n"; ) if(empty($_POST[ "pass" ])) $err = "비밀번호 필드는 비워둘 수 없습니다"; if(empty($_POST["pass2"])) $err = "비밀번호 확인 필드는 비워 둘 수 없습니다"; // 오류를 확인하고 다음과 같은 경우 사용자에게 표시 (count($err) > 0) echo showErrorMessage($err); else ( /*입력된 데이터 계속 확인 일치하는 암호 확인*/ if($_POST["pass"] != $_POST["pass2" ] ) $err = "비밀번호가 일치하지 않습니다"; //오류를 확인하고 사용자에게 표시 if(count($err) > 0) echo showErrorMessage($err); else ( /*이러한 사용자가 있는지 확인 데이터베이스* / $sql = "SELECT `login` FROM `".BEZ_DBPREFIX ."reg` WHERE `login` = "".escape_str($_POST["email"]) ."""; $res = mysqlQuery($ sql); if(mysql_num_rows($res) > 0) $err = "죄송합니다 로그인: ". $_POST["이메일"] ." busy!"; //오류를 확인하고 사용자에게 표시 if(count($err) > 0) echo showErrorMessage($err); else ( //소금의 해시 가져오기 $salt = salt(); // 비밀번호 솔트 $pass = md5(md5($_POST["pass"]).$salt); /*모든 것이 잘되면 데이터베이스에 데이터를 씁니다*/ $sql = "INSERT INTO `". BEZ_DBPREFIX ."reg ` VALUES("", "" .escape_str($_POST["email"]) ."", "". $pass ."", "". $salt ."", "". md5($salt) . "", 0)"; $ res = mysqlQuery($sql); //활성화 이메일 보내기 $url = BEZ_HOST ."less/reg/?mode=reg&key=".md5($salt); $title = "(! LANG:http:///website에 등록"; $message = "Для активации Вашего акаунта пройдите по ссылке ". $url .""; sendMessageMail($_POST["email"], BEZ_MAIL_AUTOR, $title, $message); //Сбрасываем параметры header("Location:". BEZ_HOST ."less/reg/?mode=reg&status=ok"); exit; } } } } ?>!}

    REG_FORM.HTML 파일

    활성화 이메일로 PHP MySQL 사용자 등록

    이메일 *:
    비밀번호 *:
    비밀번호 확인 *:

    아이콘이 있는 필드 *필수의

    사용자 등록이 준비되었으므로 권한 부여를 작성할 차례입니다. 사용자 인증을 위한 양식을 만든 다음 인증 양식 핸들러를 작성하고 마지막으로 스크립트를 작성합니다. 쇼.php이것은 우리가 시스템에서 승인되었는지 여부를 보여줍니다.

    AUTH.PHP 파일

    0) 에코 showErrorMessage($err); else ( /*사용자 인증을 위한 데이터베이스 가져오기 쿼리 생성*/ $sql = "SELECT * FROM `". BEZ_DBPREFIX ."reg` WHERE `login` = "". escape_str($_POST["email"]) ." " AND `status` = 1"; $res = mysqlQuery($sql); //로그인이 일치하면 비밀번호 확인 if(mysql_num_rows($res) > 0) ( //테이블에서 데이터 가져오기 $row = mysql_fetch_assoc( $res ); if(md5(md5($_POST["pass"]).$row["salt"]) == $row["pass"]) ( $_SESSION["user"] = true; // 매개변수 재설정 header("위치:". BEZ_HOST ."less/reg/?mode=auth"); exit; ) else echo showErrorMessage("잘못된 비밀번호!"); ) else echo showErrorMessage("로그인 ". $_POST["이메일"] ."찾을 수 없습니다!"); ) ) ?>

    최신 버전의 PHP를 사용하는 사람들을 위해 다음을 사용하여 이 스크립트를 게시합니다. PDO왜냐하면 확대 MySQL더 이상 사용되지 않으며 새 버전의 PHP에서 제거되었습니다. 등록 및 인증 PHP mysql pdo 다운로드

    아카이브는 2015년 2월 24일에 업데이트되었습니다.

    주목:다음과 같은 로컬 서버에서 이 스크립트를 사용하는 경우 덴버,XAMPP, 그러면 우편함에 편지가 올 때까지 기다리지 마십시오. 편지는 스텁에 있습니다 메일을 보내다. 에 덴버당신은 길을 따라 그들을 찾을 수 있습니다 Z:\tmp\!sendmail\모든 이메일 클라이언트에서 이러한 파일을 열 수 있습니다.

    안녕하세요! 이제 PHP + MySQL을 사용하여 사이트에서 가장 간단한 등록을 구현하려고 합니다. 이렇게 하려면 컴퓨터에 Apache가 설치되어 있어야 합니다. 스크립트 작동 방식은 아래에 나와 있습니다.

    1. 데이터베이스에 users 테이블을 생성하는 것부터 시작해 봅시다.. 여기에는 사용자 데이터(로그인 및 비밀번호)가 포함됩니다. phpmyadmin으로 갑시다(PC에 데이터베이스를 생성한다면 http://localhost/phpmyadmin/). 테이블 생성 사용자, 3개의 필드가 있습니다.

    mysql 데이터베이스에서 생성하고 다른 데이터베이스에서 생성할 수 있습니다. 다음으로 그림과 같이 값을 설정합니다.

    2. 이 테이블에 대한 연결이 필요합니다.파일을 생성하자 bd.php. 그 내용:

    $db = mysql_connect("My MySQL 서버","이 서버에 로그인","이 서버에 대한 비밀번호");
    mysql_select_db("연결할 데이터베이스 이름", $db);
    ?>

    제 경우에는 다음과 같습니다.

    $db = mysql_connect("로컬호스트","사용자","1234");
    mysql_select_db("mysql",$db);
    ?>

    우리는 저장 bd.php.
    훌륭한! 데이터베이스에 테이블이 있고 이에 대한 연결이 있습니다. 이제 사용자가 데이터를 남길 페이지를 만들 수 있습니다.

    3. 내용이 포함된 reg.php 파일을 생성합니다(모든 주석 내부).



    등록


    등록
















    4. 파일 생성, 데이터베이스에 데이터를 입력하고 사용자를 저장합니다. save_user.php(내부 코멘트):



    {
    }
    //로그인과 비밀번호를 입력하면 태그와 스크립트가 작동하지 않도록 처리하므로 사람들이 무엇을 입력할 수 있는지 절대 알 수 없습니다.


    // 여분의 공백 제거
    $로그인 = 트림($로그인);
    $비밀번호 = 트림($비밀번호);
    // 데이터베이스에 연결
    // 동일한 로그인을 가진 사용자가 있는지 확인
    $result = mysql_query("SELECT id FROM users WHERE login="$login"",$db);
    if (!empty($myrow["id"])) (
    exit("죄송합니다. 입력하신 아이디는 이미 등록되어 있습니다. 다른 아이디를 입력해주세요.");
    }
    // 데이터가 없으면 저장
    $result2 = mysql_query("INSERT INTO 사용자(로그인,비밀번호) VALUES("$login","$password")");
    // 오류가 있는지 확인
    만약 ($result2=="TRUE")
    {
    echo "성공적으로 등록했습니다! 이제 사이트에 들어갈 수 있습니다. 메인 페이지";
    }
    또 다른(
    echo "오류! 로그인하지 않았습니다.";
    }
    ?>

    5. 이제 사용자가 등록할 수 있습니다!다음으로 이미 등록된 사용자가 사이트에 입장할 수 있는 "문"을 만들어야 합니다. index.php(내부 코멘트):

    // 전체 절차는 세션에서 작동합니다. 사용자가 사이트에 있는 동안 사용자의 데이터가 저장됩니다. 페이지 맨 처음에 실행하는 것이 매우 중요합니다!!!
    세션 시작();
    ?>


    메인 페이지


    메인 페이지











    등록하다



    // 로그인 및 사용자 ID 변수가 비어 있는지 확인
    if (empty($_SESSION["login"]) 또는 empty($_SESSION["id"]))
    {
    // 비어 있으면 링크를 표시하지 않습니다.
    echo "손님으로 로그인하셨습니다.
    이 링크는 등록된 사용자만 사용할 수 있습니다.";
    }
    또 다른
    {

    파일에 index.php등록된 사용자에게만 열려 있는 링크를 표시합니다. 이것은 모든 데이터에 대한 액세스를 제한하는 스크립트의 요점입니다.

    6. 입력한 로그인과 비밀번호를 확인하는 파일이 있습니다. testreg.php(내부 주석):

    session_start();// 전체 절차는 세션에서 작동합니다. 사용자가 사이트에 있는 동안 사용자의 데이터가 저장됩니다. 페이지 맨 처음에 실행하는 것이 매우 중요합니다!!!
    if (isset($_POST["login"])) ( $login = $_POST["login"]; if ($login == "") ( unset($login);) ) // 입력한 로그인을 입력 사용자를 $login 변수에 넣고 비어 있으면 변수를 파괴합니다.
    if (isset($_POST["password"])) ( $password=$_POST["password"]; if ($password =="") ( unset($password);) )
    //사용자가 입력한 비밀번호를 $password 변수에 넣고 비어 있으면 변수를 삭제합니다.
    if (empty($login) or empty($password)) //사용자가 로그인이나 비밀번호를 입력하지 않았다면 오류를 발생시키고 스크립트를 중지합니다.
    {
    exit("모든 정보를 입력하지 않았습니다. 돌아가서 모든 필드를 채우십시오!");
    }
    //로그인과 비밀번호를 입력하면 태그와 스크립트가 작동하지 않도록 처리하므로 사람들이 무엇을 입력할 수 있는지 절대 알 수 없습니다.
    $login = 스트립슬래시($login);
    $login = htmlspecialchars($login);
    $password = 스트립슬래시($password);
    $password = htmlspecialchars($password);
    // 여분의 공백 제거
    $로그인 = 트림($로그인);
    $비밀번호 = 트림($비밀번호);
    // 데이터베이스에 연결
    include("bd.php");// bd.php 파일은 다른 모든 사람들과 같은 폴더에 있어야 합니다. 그렇지 않은 경우 경로를 변경하십시오.

    $result = mysql_query("SELECT * FROM 사용자 WHERE 로그인="$login"",$db); //데이터베이스에서 입력한 로그인으로 사용자에 대한 모든 데이터를 검색합니다.
    $myrow = mysql_fetch_array($결과);
    if (빈($myrow["비밀번호"]))
    {
    //입력한 로그인을 가진 사용자가 존재하지 않는 경우
    }
    또 다른(
    //있는 경우 암호 확인
    if ($myrow["비밀번호"]==$비밀번호) (
    //비밀번호가 일치하면 사용자 세션을 시작합니다! 당신은 그를 축하할 수 있습니다, 그가 입장했습니다!
    $_SESSION["로그인"]=$myrow["로그인"];
    $_SESSION["id"]=$myrow["id"];//이 데이터는 매우 자주 사용되므로 로그인한 사용자가 "이동"합니다.
    echo "사이트에 성공적으로 로그인했습니다! 메인 페이지";
    }
    또 다른(
    //비밀번호가 일치하지 않는 경우

    Exit("죄송합니다. 입력하신 로그인 또는 비밀번호가 정확하지 않습니다.");
    }
    }
    ?>

    좋아 이제 끝났어! 어쩌면 수업이 지루할 수도 있지만 매우 유용합니다. 여기에는 등록에 대한 아이디어만 표시되어 있으므로 이를 개선할 수 있습니다. 보호, 디자인, 데이터 필드 추가, 아바타 업로드, 계정 로그아웃(이를 위해 함수를 사용하여 세션에서 변수를 삭제하기만 하면 됩니다. 설정 해제) 등등. 행운을 빕니다!

    모든 것을 확인했는데 잘 작동합니다!