PHP - MySQL 로그인: 초보자 가이드
안녕하세요, 웹 개발자 지망생 여러분! 오늘 우리는 PHP와 MySQL의 세계로 들어가 단순하지만 강력한 로그인 시스템을 만들어 보겠습니다. 이 분야를 몇 년 동안 가르쳐온 사람으로서, 이 기술을 마스터하면 웹 개발의 비밀 문을 열어버리는 것과 같다고 말씀드릴 수 있습니다. 그麼, 손을 걷어붙이고 시작해 보겠습니다!
전체 그림 이해
코딩을 시작하기 전에 잠시 우리가 이루고자 하는 것을 이해해 보겠습니다. 당신이 나무집을 짓는다고 상상해 보세요. 견고한 기초, 벽, 지붕, 그리고 들어가고 나가는 방법이 필요합니다. 우리의 PHP-MySQL 로그인 시스템도 비슷합니다:
- Config.php: 우리의 기초로, 데이터베이스에 연결합니다.
- Login.php: 나무집의 문으로 생각해 보세요.
- Session.php: 누가 안에 있는지 추적합니다.
- Welcome.php: 인증된 사용자들이 모이는 따뜻한 내부 공간.
- Logout.php: 사용자들에게 나가는 길을 보여주는 출구 표지.
이제 각 부분을 단계별로 만들어 보겠습니다!
Config.php: 기초 다지기
이 파일은 PHP와 MySQL 사이의 비밀 손 shake처럼 보입니다. 데이터베이스 연결 세부 정보를 저장합니다.
<?php
define('DB_SERVER', 'localhost');
define('DB_USERNAME', 'root');
define('DB_PASSWORD', '');
define('DB_NAME', 'login_demo');
$conn = mysqli_connect(DB_SERVER, DB_USERNAME, DB_PASSWORD, DB_NAME);
if($conn === false){
die("ERROR: Could not connect. " . mysqli_connect_error());
}
?>
이를 해부해 보면:
-
define()
를 사용하여 데이터베이스 세부 정보를 상수로 설정합니다. -
mysqli_connect()
는 MySQL 데이터베이스에 연결합니다. - 연결이 실패하면
die()
를 사용하여 실행을 중지하고 오류 메시지를 표시합니다.
Pro tip: 실제 데이터베이스 자격 증명을 절대 공유하지 마세요! 이 예제는 기본값을 사용하지만, 실제 프로젝트에서는 이를 비밀로 유지하세요!
Login.php: 게이트keeper
이 부분에서는 마법이 일어납니다. 사용자가 자신의 자격 증명을 입력하면, 그들이 들어올 수 있는지 확인합니다.
<?php
session_start();
require_once "config.php";
if($_SERVER["REQUEST_METHOD"] == "POST"){
$username = trim($_POST["username"]);
$password = trim($_POST["password"]);
$sql = "SELECT id, username, password FROM users WHERE username = ?";
if($stmt = mysqli_prepare($conn, $sql)){
mysqli_stmt_bind_param($stmt, "s", $param_username);
$param_username = $username;
if(mysqli_stmt_execute($stmt)){
mysqli_stmt_store_result($stmt);
if(mysqli_stmt_num_rows($stmt) == 1){
mysqli_stmt_bind_result($stmt, $id, $username, $hashed_password);
if(mysqli_stmt_fetch($stmt)){
if(password_verify($password, $hashed_password)){
session_start();
$_SESSION["loggedin"] = true;
$_SESSION["id"] = $id;
$_SESSION["username"] = $username;
header("location: welcome.php");
} else{
$login_err = "Invalid username or password.";
}
}
} else{
$login_err = "Invalid username or password.";
}
} else{
echo "Oops! Something went wrong. Please try again later.";
}
mysqli_stmt_close($stmt);
}
mysqli_close($conn);
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Login</title>
</head>
<body>
<h2>Login</h2>
<form action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>" method="post">
<div>
<label>Username</label>
<input type="text" name="username" required>
</div>
<div>
<label>Password</label>
<input type="password" name="password" required>
</div>
<div>
<input type="submit" value="Login">
</div>
</form>
</body>
</html>
이를 해부해 보면:
- 세션을 시작하고 config 파일을 포함합니다.
- 폼이 POST 방식으로 제출되었는지 확인합니다.
- 준비된 문장을 사용하여 SQL 인젝션을 방지합니다.
-
password_verify()
를 사용하여 비밀번호를 확인합니다 (실제 프로젝트에서는 항상 비밀번호를 해시하세요!). - 로그인이 성공하면 세션 변수를 설정하고 welcome.php로 리디렉션합니다.
- 간단한 HTML 폼을 사용하여 사용자가 자신의 자격 증명을 입력할 수 있게 합니다.
실제 애플리케이션에서는 보안 조치와 오류 처리를 더 추가하고 싶을 것입니다!
Session.php: 보디가드
이 파일은 사용자가 로그인했는지 확인합니다. 로그인하지 않았다면 로그인 페이지로 되돌립니다.
<?php
session_start();
if(!isset($_SESSION["loggedin"]) || $_SESSION["loggedin"] !== true){
header("location: login.php");
exit;
}
?>
짧고 간결합니다! 이 코드는:
- 세션을 시작합니다.
- 사용자가 로그인했는지 확인합니다.
- 로그인하지 않았다면 로그인 페이지로 리디렉션합니다.
Welcome.php: VIP 区域
사용자가 성공적으로 로그인한 후 도착하는 곳입니다.
<?php
require_once "session.php";
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Welcome</title>
</head>
<body>
<h1>Hi, <b><?php echo htmlspecialchars($_SESSION["username"]); ?></b>. Welcome to our site.</h1>
<p>
<a href="logout.php">Sign Out</a>
</p>
</body>
</html>
이 작업은 다음과 같습니다:
- session.php를 포함하여 로그인한 사용자만이이 페이지에 접근할 수 있도록 합니다.
- 세션에 저장된 사용자 이름을 사용하여 개인 맞춤형 환영 메시지를 표시합니다.
- 로그아웃 링크를 제공합니다.
Logout.php: 출구
마지막으로, 사용자가 안전하게 로그아웃할 수 있는 방법이 필요합니다.
<?php
session_start();
$_SESSION = array();
session_destroy();
header("location: login.php");
exit;
?>
이 스크립트는 다음을 수행합니다:
- 세션을 시작합니다.
- 모든 세션 변수를 제거합니다.
- 세션을 파괴합니다.
- 사용자를 로그인 페이지로 리디렉션합니다.
모든 것을 함께 모음
이제 우리가 만든 모든 부분을 함께 요약해 보겠습니다:
파일 | 목적 | 주요 기능 |
---|---|---|
Config.php | 데이터베이스 연결 | mysqli_connect() |
Login.php | 사용자 인증 | mysqli_prepare(), password_verify() |
Session.php | 세션 관리 | session_start(), $_SESSION 확인 |
Welcome.php | 인증된 사용자 페이지 | 개인 맞춤형 콘텐츠 표시 |
Logout.php | 사용자 세션 종료 | session_destroy() |
이제 당신은 기본 PHP-MySQL 로그인 시스템을 만들었습니다. 기억하세요, 이것이 시작에 불과합니다. 실제 애플리케이션에서는 다음과 같은 기능을 더 추가하고 싶을 것입니다:
- 비밀번호 재설정 기능
- 'Remember me' 옵션
- 더 robust한 오류 처리
- 향상된 보안 조치
계속 연습하고, 호기심을 유지하면, 언제쯤 복잡한 웹 애플리케이션을 쉽게 만들 수 있을 것입니다. 행복한 코딩, 미래의 웹 마법사 여러분!
Credits: Image by storyset