이 튜토리얼은 PHP, MySQL 및 HTML을 사용하여 로그인 시스템을 만드는 방법에 대한 것입니다. 귀하의 웹사이트는 동적이어야 하며 방문객들은 즉시 액세스할 수 있어야 합니다. 따라서 그들은 가능한 한 많이 로그인하기를 원합니다. 로그인 인증 시스템은 모든 웹 애플리케이션에서 매우 일반적입니다. 이는 등록된 사용자가 웹사이트 및 회원 전용 기능에 접근할 수 있도록 해줍니다. 또한 사용자의 정보를 저장하고 싶을 때 유용합니다. 이는 쇼핑 사이트, 교육 사이트 및 회원 사이트 등을 포함한 모든 것을 다룹니다.
*제휴 링크. 자세한 내용은 이용 약관을 참조하세요.
이 튜토리얼은 5부분으로 구성되어 있습니다.
목차
- 필요 사항
- 회원가입 시스템
- 로그인 시스템
- 환영 페이지
- 로그아웃 스크립트
1) PHP 로그인 시스템 구축을 위한 요구 사항
이 튜토리얼을 성공적으로 따라하고 PHP 로그인 시스템을 구축하기 위해서는 다음과 같은 것들에 대한 지식과 이해가 필요합니다:
- 코드를 실행할 수 있는 PHP를 지원하는 서버
- HTML 및 CSS에 대한 지식과 친숙함
- 장치에 설치된 MySQL 데이터베이스 및 이를 사용하는 방법에 대한 지식
- 로그인 시스템에 올바른 보안 조치를 추가할 수 있는 능력
이 모든 기본 요구 사항과 지식이 있다면, PHP 로그인 시스템 구축 방법에 대한 다음 단계로 진행할 준비가 된 것입니다.
2) 가입 시스템 구축
이번 부분에서는 사용자가 시스템에 새 계정을 생성할 수 있도록 하는 가입 시스템을 만들 것입니다. 첫 번째 단계는 HTML 등록 양식을 만드는 것입니다. 양식은 만들기 매우 간단합니다. 이름, 이메일, 비밀번호 및 비밀번호 확인을 요청합니다. 이메일 주소는 각 사용자마다 고유해야 합니다. 동일한 이메일 주소로 다수의 계정을 생성하는 것은 허용되지 않습니다. 동일한 이메일 주소로 여러 계정을 만들려고 하는 사용자에게는 오류 메시지가 표시됩니다.
1단계: HTML로 등록 양식 만들기
우리는 PHP 파일을 만들 것이며 그 이름은 register.php이며 그 안에 다음 코드가 있을 것입니다. 이는 몇 가지 기본적인 유효성 검사가 있는 간단한 HTML 폼입니다. HTML에 익숙하지 않다면 많은 온라인 사이트에서 준비된 html5 로그인 폼 템플릿을 얻을 수 있습니다.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Sign Up</title>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css">
</head>
<body>
<div class="container">
<div class="row">
<div class="col-md-12">
<h2>Register</h2>
<p>Please fill this form to create an account.</p>
<form action="" method="post">
<div class="form-group">
<label>Full Name</label>
<input type="text" name="name" class="form-control" required>
</div>
<div class="form-group">
<label>Email Address</label>
<input type="email" name="email" class="form-control" required />
</div>
<div class="form-group">
<label>Password</label>
<input type="password" name="password" class="form-control" required>
</div>
<div class="form-group">
<label>Confirm Password</label>
<input type="password" name="confirm_password" class="form-control" required>
</div>
<div class="form-group">
<input type="submit" name="submit" class="btn btn-primary" value="Submit">
</div>
<p>Already have an account? <a href="login.php">Login here</a>.</p>
</form>
</div>
</div>
</div>
</body>
</html>
위의 HTML 폼의 출력물은 다음과 같이 보일 것입니다.
모든 입력 필드는 기본 HTML 속성인 "required"
속성을 추가하여 필수 사항입니다. type="email"
의 사용은 사용자가 제공한 이메일 주소를 유효성 검사하고 이메일 주소가 유효하지 않으면 오류를 표시합니다. 등록 폼에 대해 우리는 빠른 개발을 위해 부트스트랩을 사용했습니다. HTML 코드에 시간을 절약하고 싶다면 프로젝트에 무료 html5 템플릿을 사용할 수 있습니다.
단계 2: MySQL 데이터베이스 테이블 생성
당신이 원하는 적합한 이름의 새 데이터베이스를 만들어야 합니다. 그 후 아래 SQL 쿼리를 실행하여 새로 생성한 MySQL 데이터베이스 내에 사용자 테이블을 생성해 주세요.
CREATE TABLE `users` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(75) NOT NULL,
`password` varchar(255) NOT NULL,
`email` varchar(100) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `email` (`email`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1;
단계 3: 데이터베이스 구성 파일 생성
이제 사용자 테이블을 생성했습니다. MySQL 데이터베이스에 연결하기 위해 새 PHP 파일 config.php를 만들어 보겠습니다. 다음 코드를 config.php 파일에 붙여넣고 데이터베이스 이름을 생성할 때 선택한 이름으로 변경하세요.
단계 4: 세션 파일 생성
session.php라는 파일을 만들어 보겠습니다. 이 파일에서 세션을 시작하고 사용자가 이미 로그인되어 있는지 확인한 후, 이미 로그인되어 있다면 사용자를 welcome.php 파일로 리디렉션시킵니다.
단계 5: PHP에서 등록 양식 생성
마지막으로, 사용자가 시스템에 계정을 등록할 수 있는 PHP 코드를 생성할 시간입니다. 이 PHP 코드는 동일한 이메일 주소로 이미 등록된 사용자가 있다면 오류를 통보할 것입니다.
register.php 파일에 다음 코드를 대체하세요.
prepare("SELECT * FROM users WHERE email = ?")) {
$error = '';
// 매개변수 바인딩 (s = 문자열, i = int, b = blob 등), 우리의 경우 사용자 이름은 문자열이므로 "s"를 사용합니다
$query->bind_param('s', $email);
$query->execute();
// 결과를 저장하여 데이터베이스에 계정이 있는지 확인할 수 있도록 함
$query->store_result();
if ($query->num_rows > 0) {
$error .= 'The email address is already registered!
';
} else {
// 비밀번호 유효성 검사
if (strlen($password ) < 6) {
$error .= 'Password must have atleast 6 characters.
';
}
// 확인 비밀번호 유효성 검사
if (empty($confirm_password)) {
$error .= 'Please enter confirm password.
';
} else {
if (empty($error) && ($password != $confirm_password)) {
$error .= 'Password did not match.
';
}
}
if (empty($error) ) {
$insertQuery = $db->prepare("INSERT INTO users (name, email, password) VALUES (?, ?, ?);");
$insertQuery->bind_param("sss", $fullname, $email, $password_hash);
$result = $insertQuery->execute();
if ($result) {
$error .= 'Your registration was successful!
';
} else {
$error .= 'Something went wrong!
';
}
}
}
}
$query->close();
$insertQuery->close();
// DB 연결 닫기
mysqli_close($db);
}
?>
Sign Up
Register
Please fill this form to create an account.
사용자가 제출 버튼을 클릭하면 $_SERVER["REQUEST_METHOD"] == "POST"
및 $_POST['submit']
변수가 설정되었는지 확인합니다. 보안상의 이유로 데이터베이스에 암호를 평문으로 저장하지 않기를 권장합니다. 우리는 강력한 일방향 해싱 알고리즘을 사용하여 새로운 암호 해시를 생성하는 password_hash()
함수를 사용했습니다.
위의 PHP 스크립트는 동일한 이메일 주소로 등록된 사용자가 없음을 검증하고 암호를 확인합니다. 확인이 완료되면 사용자가 제공한 정보를 사용자 테이블에 저장하고 등록이 성공적이었음을 사용자에게 알립니다.
3) 로그인 시스템 만들기
이 부분에서는 로그인 폼을 생성하여 사용자가 시스템의 제한된 영역에 액세스할 수 있도록 합니다. 우리의 경우, 제한된 영역은 다음 부분에서 다룰 환영 페이지입니다.
단계 1: HTML에서 로그인 폼 생성
아래는 HTML에서의 로그인 폼입니다. login.php라는 파일에 붙여넣으십시오.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Login</title>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css">
</head>
<body>
<div class="container">
<div class="row">
<div class="col-md-12">
<h2>Login</h2>
<p>Please fill in your email and password.</p>
<form action="" method="post">
<div class="form-group">
<label>Email Address</label>
<input type="email" name="email" class="form-control" required />
</div>
<div class="form-group">
<label>Password</label>
<input type="password" name="password" class="form-control" required>
</div>
<div class="form-group">
<input type="submit" name="submit" class="btn btn-primary" value="Submit">
</div>
<p>Don't have an account? <a href="register.php">Register here</a>.</p>
</form>
</div>
</div>
</div>
</body>
</html>
위의 코드의 출력은 다음과 같이 보입니다.
단계 2: PHP에서 로그인 시스템 생성
HTML로 로그인 폼을 생성한 후 로그인 자격 증명을 유효성 검사하는 코드를 작성할 것입니다. 양식을 제출하면 이메일과 비밀번호가 작성되었는지 확인할 것입니다. 작성되었다면 이메일과 비밀번호를 기반으로 데이터베이스에서 레코드를 찾기 위해 SELECT
쿼리를 실행할 것입니다. 레코드가 발견되면 "userID"
를 세션에 저장하고 사용자를 welcome.php 파일로 리디렉션할 것입니다. 그렇지 않은 경우 사용자에게 오류 메시지가 표시될 것입니다.
login.php 파일에서 다음 코드를 대체합시다.
Please enter email.';
}
// 비밀번호가 비어 있는지 유효성 검사
if (empty($password)) {
$error .= 'Please enter your password.
';
}
if (empty($error)) {
if($query = $db->prepare("SELECT * FROM users WHERE email = ?")) {
$query->bind_param('s', $email);
$query->execute();
$row = $query->fetch();
if ($row) {
if (password_verify($password, $row['password'])) {
$_SESSION["userid"] = $row['id'];
$_SESSION["user"] = $row;
// 사용자를 환영 페이지로 리디렉션
header("location: welcome.php");
exit;
} else {
$error .= 'The password is not valid.
';
}
} else {
$error .= 'No User exist with that email address.
';
}
}
$query->close();
}
// 연결 종료
mysqli_close($db);
}
?>
Login
Login
Please fill in your email and password.
4) 환영 페이지 생성
welcome.php 파일에 대한 코드는 아래에 있습니다. 사용자는 성공적인 로그인 프로세스 후에 이 페이지로 리디렉션될 것입니다. 페이지 맨 위에 사용자가 로그인되지 않은 경우 로그인 페이지로 리디렉션하는 코드를 추가했습니다.
welcome.php 파일을 생성하고 다음 코드를 붙여넣어봅시다.
Welcome
Hello, . Welcome to demo site.
5) 로그아웃 스크립트
마지막으로, logout.php 파일을 생성하고 다음 코드를 붙여넣어봅시다.
사용자가 로그아웃 링크를 클릭하면 위 스크립트가 호출되어 세션을 파기하고 사용자를 login.php 파일로 리디렉션합니다.
결론
이 튜토리얼에서는 HTML, PHP 및 MySQL을 사용하여 로그인 시스템을 만드는 방법을 설명했습니다. 로그인 시스템을 만드는 것이 얼마나 간단한지 이해하면 비밀번호 재설정, 비밀번호 분실, 이메일 주소 확인, 사용자 프로필 편집 등과 같은 다른 기능을 추가할 수 있습니다.
Source:
https://dzone.com/articles/create-a-login-system-using-php