본문 바로가기
PHP로 웹사이트 만들기

PHP에서 세션 관리: 로그인 상태 유지 및 사용자 인증 시스템 구축하기

by blogfine 2025. 2. 15.

웹 애플리케이션에서 사용자 인증은 중요한 기능입니다. 사용자 인증 시스템을 통해 웹사이트의 보안을 강화하고, 사용자가 로그인 상태를 유지하며, 특정 페이지나 기능에 대한 접근을 제어할 수 있습니다. PHP는 세션(Session) 관리를 통해 이러한 로그인 기능을 쉽게 구현할 수 있습니다. 이번 글에서는 PHP에서 세션을 사용하여 로그인 상태를 유지하고, 사용자 인증 시스템을 구축하는 방법에 대해 알아보겠습니다.

세션(Session)이란?

세션은 사용자가 웹사이트를 방문하는 동안 정보를 저장하고 추적하는 방식입니다. 웹은 기본적으로 상태가 없는(Stateless) 프로토콜인 HTTP를 사용하므로, 서버는 각 사용자의 상태를 추적할 방법이 필요합니다. 이때 세션을 사용하여 사용자의 정보를 저장하고, 여러 페이지 간에 상태를 유지할 수 있습니다. 세션은 주로 로그인 상태를 유지하거나 사용자가 선택한 설정 등을 저장하는 데 활용됩니다.

세션을 사용한 로그인 시스템 구축

PHP에서 세션을 사용해 로그인 상태를 유지하고 인증 시스템을 구축하는 방법은 다음과 같습니다:

  1. 사용자 로그인 폼 작성
  2. 사용자 인증을 위한 데이터베이스 쿼리 작성
  3. 세션 시작 및 로그인 상태 저장
  4. 로그인 상태 확인 및 인증된 사용자만 접근 허용
  5. 로그아웃 처리

1. 사용자 로그인 폼 작성

먼저, 사용자가 로그인할 수 있는 HTML 로그인 폼을 작성해야 합니다. 사용자가 아이디와 비밀번호를 입력할 수 있도록 합니다.

<form method="POST" action="login.php">
    <label for="username">아이디:</label>
    <input type="text" name="username" id="username" required>
    <label for="password">비밀번호:</label>
    <input type="password" name="password" id="password" required>
    <button type="submit">로그인</button>
</form>

위의 로그인 폼에서는 사용자에게 아이디와 비밀번호를 입력받고, 폼이 제출되면 `login.php`로 데이터를 전송하게 됩니다.

2. 사용자 인증을 위한 데이터베이스 쿼리 작성

이제 사용자가 제출한 아이디와 비밀번호를 사용하여 데이터베이스에서 해당 사용자 정보를 확인해야 합니다. 데이터베이스에는 사용자 정보를 저장한 테이블이 있어야 합니다. 예를 들어, 아래와 같이 `users` 테이블을 설정할 수 있습니다.

CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(50) NOT NULL UNIQUE,
    password VARCHAR(255) NOT NULL
);

이제 사용자가 입력한 아이디와 비밀번호를 데이터베이스와 비교하여 유효성을 검사하는 PHP 코드를 작성해야 합니다.

php 복사 편집

위 코드에서, 사용자가 입력한 비밀번호는 `password_verify()` 함수를 사용하여 해시된 비밀번호와 비교합니다. 비밀번호가 일치하면 세션을 시작하고, 사용자 정보를 세션에 저장합니다.

3. 세션 시작 및 로그인 상태 저장

세션을 시작하려면 `session_start()` 함수를 호출해야 합니다. 이 함수는 사용자의 세션을 식별하고, 서버에 세션 데이터를 저장하거나 로드하는 역할을 합니다. 로그인 성공 시, 사용자 정보를 세션에 저장하여 여러 페이지에서 로그인 상태를 유지할 수 있습니다.

<?php
// 데이터베이스 연결
$conn = new mysqli("localhost", "username", "password", "database");

// 로그인 폼에서 받은 값
$username = $_POST['username'];
$password = $_POST['password'];

// SQL 쿼리 작성
$query = "SELECT * FROM users WHERE username = ?";
$stmt = $conn->prepare($query);
$stmt->bind_param("s", $username);
$stmt->execute();
$result = $stmt->get_result();

if ($result->num_rows > 0) {
    $user = $result->fetch_assoc();
    
    // 비밀번호 확인
    if (password_verify($password, $user['password'])) {
        // 비밀번호가 맞다면 세션에 사용자 정보 저장
        session_start();
        $_SESSION['user_id'] = $user['id'];
        $_SESSION['username'] = $user['username'];
        header("Location: welcome.php");
        exit();
    } else {
        echo "비밀번호가 일치하지 않습니다.";
    }
} else {
    echo "사용자가 존재하지 않습니다.";
}

$stmt->close();
$conn->close();
?>

위 코드에서, `$_SESSION['username']`을 통해 로그인한 사용자의 정보를 확인할 수 있습니다. 이 값을 사용하여 로그인 상태를 유지할 수 있습니다.

4. 로그인 상태 확인 및 인증된 사용자만 접근 허용

웹 애플리케이션에서 로그인한 사용자만 특정 페이지나 기능에 접근할 수 있도록 제어할 수 있습니다. 로그인되지 않은 사용자가 인증이 필요한 페이지에 접근하려고 하면, 로그인 페이지로 리디렉션하거나 경고 메시지를 표시할 수 있습니다.

<?php
session_start();

// 로그인 후 세션에 저장된 사용자 정보 확인
if (isset($_SESSION['username'])) {
    echo "안녕하세요, " . $_SESSION['username'] . "님!";
} else {
    echo "로그인하지 않았습니다.";
}
?>

위 코드는 사용자가 로그인되지 않은 상태에서 인증이 필요한 페이지에 접근하려고 할 경우, 로그인 페이지로 리디렉션하는 예시입니다. 이를 통해 인증되지 않은 사용자는 제한된 페이지에 접근할 수 없게 됩니다.

5. 로그아웃 처리

로그아웃 기능은 사용자가 세션을 종료하고, 로그인 상태를 해제할 수 있게 해주는 기능입니다. 로그아웃 처리 시, 세션에 저장된 정보를 삭제하고 사용자를 로그인 페이지로 리디렉션합니다.

<?php
session_start();

// 로그인 여부 확인
if (!isset($_SESSION['username'])) {
    header("Location: login.php");
    exit();
}
?>

위 코드는 `session_unset()`을 사용하여 세션 데이터를 삭제하고, `session_destroy()`를 호출하여 세션을 종료합니다. 그 후 로그인 페이지로 리디렉션합니다.

결론

PHP에서 세션을 사용하여 로그인 상태를 유지하고, 사용자 인증 시스템을 구축하는 방법에 대해 알아보았습니다. 세션 관리 기능을 통해 사용자 인증과 접근 제어를 효율적으로 구현할 수 있으며, 웹 애플리케이션의 보안을 강화할 수 있습니다. 세션을 활용하면 사용자 맞춤형 경험을 제공하고, 인증된 사용자만 특정 페이지나 기능에 접근할 수 있도록 제어할 수 있습니다.

로그인 시스템을 구축할 때 중요한 점은 비밀번호를 안전하게 처리하는 것입니다. 비밀번호는 항상 해시 처리하여 저장하고, 사용자가 입력한 비밀번호와 비교할 때는 `password_verify()`를 사용하는 것이 중요합니다. 이를 통해 보안을 강화하고, 사용자 정보를 안전하게 보호할 수 있습니다.

``` 이 HTML 코드는 PHP에서 세션을 사용하여 로그인 시스템을 구축하는 방법을 상세히 설명하고 있습니다. 로그인 폼 작성, 사용자 인증, 세션을 통한 로그인 상태 유지, 인증된 사용자만 접근 허용, 로그아웃 처리 등 주요 기능을 포함하고 있습니다. 이를 통해 로그인 시스템을 안전하고 효율적으로 구현할 수 있습니다.