💻 쇼핑몰 자동화 & 웹 개발 가이드

[PHP 입문] 로그인 시스템 완성: 세션, 보안 처리까지

rhandy 2025. 4. 11. 07:10
728x90

"회원가입은 했는데… 로그인은 어떻게 하지?" PHP 로그인 시스템, 실제 코드로 쉽게 따라 배워봐요!

안녕하세요, PHP 입문자 여러분! 웹 개발을 하다 보면 반드시 마주치게 되는 기능 중 하나가 바로 로그인입니다. 예전엔 저도 로그인 페이지 만들다 로그인되긴 하는데 세션이 안 남아서 멘붕이었던 기억이 있어요 😂 로그인은 단순히 아이디와 비밀번호를 입력받는 걸로 끝이 아니에요. 데이터베이스와의 연동, 입력값 검증, 세션 처리 등 다양한 요소가 맞물려 돌아가야 제대로 작동하죠.

이번 글에서는 HTML 폼부터 PHP 백엔드, 세션 처리까지 로그인 시스템의 기본을 아주 쉽게 풀어드릴게요. 실습 코드도 같이 보면서, 처음부터 끝까지 따라오기만 하면 나만의 로그인 기능을 만들 수 있게 될 거예요!

로그인 시스템의 기본 개념

로그인이란 사용자의 정보를 입력받아, 해당 정보가 시스템 내에 존재하는지 확인한 뒤, 인증이 성공하면 사용자에게 ‘접속 권한’을 부여하는 과정입니다. 대부분은 이메일(또는 ID)과 비밀번호를 기반으로 인증하며, 성공 시에는 서버에서 세션(session)을 생성해 사용자 정보를 기억합니다. 로그인 시스템은 단순히 form을 받아서 처리하는 걸 넘어서서, 다음과 같은 과정을 거칩니다.

  • 1. 사용자 입력 값 수집 (HTML 폼)
  • 2. PHP로 값 전달 및 DB 조회
  • 3. 일치하는 계정이 있다면 로그인 처리
  • 4. 세션 생성으로 로그인 유지

이제 아래부터는 이 과정을 단계별로 구현해보겠습니다.

HTML 로그인 폼 만들기

로그인 시스템의 첫걸음은 바로 사용자 입력을 위한 HTML 폼입니다. 아래는 가장 기본적인 로그인 폼 예제입니다.

<form action="login.php" method="POST">
  <input type="text" name="username" placeholder="아이디 입력"><br>
  <input type="password" name="password" placeholder="비밀번호 입력"><br>
  <button type="submit">로그인</button>
</form>
요소 설명
<form> 로그인 데이터 전송을 위한 컨테이너
action="login.php" 입력값을 처리할 PHP 파일 경로
method="POST" 사용자 정보 보호를 위한 POST 방식 사용

PHP로 로그인 처리하기

이제 사용자가 로그인 폼에 입력한 값을 받아서 실제 인증 처리를 하는 PHP 코드를 작성해볼 차례입니다. 예시는 아주 단순화된 버전으로 설명드릴게요.

<?php
// 예시용: 실제로는 DB에서 조회해야 함
$correct_id = "admin";
$correct_pw = "1234";

// 폼 데이터 수신
$id = $_POST['username'];
$pw = $_POST['password'];

if ($id === $correct_id && $pw === $correct_pw) {
  echo "로그인 성공!";
} else {
  echo "로그인 실패. 아이디 또는 비밀번호가 잘못되었습니다.";
}
?>
  • $_POST로 입력값 수신
  • if 조건문으로 검증
  • 일치 여부에 따라 로그인 성공/실패 처리

세션(Session)으로 로그인 유지

로그인이 성공했더라도, 사용자가 다음 페이지로 이동하면 인증 정보는 사라지게 됩니다. 이를 해결하기 위해 ‘세션’을 사용합니다. 세션은 서버가 브라우저에 대해 사용자 정보를 저장하는 방식으로, 로그인 상태 유지를 가능하게 해줍니다.

<?php
session_start(); // 세션 시작

if ($id === $correct_id && $pw === $correct_pw) {
  $_SESSION['username'] = $id;
  echo "로그인 성공! <a href='mypage.php'>마이페이지로</a>";
}
?>

이제 로그인 후 다른 페이지에서도 $_SESSION['username'] 값을 통해 로그인 상태를 유지할 수 있게 됩니다.

잘못된 로그인 처리와 에러 메시지

실제 로그인 구현에서는 단순한 비교만으로는 부족합니다. 비어 있는 입력값, 잘못된 형식, 존재하지 않는 사용자 등 다양한 예외 상황을 처리해야 합니다.

상황 처리 방법
아이디 입력 안 함 입력값이 비어있는지 검사 후 경고 출력
비밀번호 오류 "비밀번호가 틀렸습니다" 등의 메시지 출력
존재하지 않는 사용자 DB에 없는 ID면 "존재하지 않는 계정" 메시지

보안을 위한 실전 팁

초보자도 알아야 할 로그인 보안 기본기를 정리해드릴게요. 나중에 실무나 포트폴리오를 만들 때도 꼭 챙겨야 할 내용입니다.

  • 입력값 필터링 (htmlspecialchars(), trim() 등 사용)
  • 비밀번호는 password_hash() / password_verify() 사용
  • 세션 하이재킹 방지를 위한 session_regenerate_id()
  • HTTPS 사용 및 보안 헤더 추가
  • 로그인 시도 횟수 제한 (Brute Force 대응)
Q 로그인 처리를 꼭 POST 방식으로 해야 하나요?

네. GET 방식은 주소창에 정보가 노출되기 때문에 로그인 같은 민감한 데이터 전송에는 적절하지 않습니다. POST 방식이 훨씬 안전해요.

A 네! 로그인은 반드시 POST 방식으로 처리하세요.
Q 비밀번호는 데이터베이스에 그대로 저장해도 되나요?

절대 안 됩니다. 평문 저장은 보안상 치명적이에요. password_hash()로 암호화해서 저장하고, password_verify()로 비교해야 합니다.

A 무조건 해시 처리! 절대 평문으로 저장하지 마세요.
Q 로그인 성공 시 리다이렉트는 어떻게 하나요?

PHP에서 header("Location: 페이지명.php");을 사용하면 로그인 성공 시 자동으로 다른 페이지로 이동시킬 수 있어요.

A header 함수로 깔끔하게 이동 처리하세요!
Q 로그인 후 페이지에서도 세션이 유지되나요?

네, 유지됩니다. 단, 로그인된 페이지에서도 session_start()를 꼭 호출해야 세션 값이 유지됩니다. 안 쓰면 값이 사라진 것처럼 보여요.

A 모든 세션 페이지에서 session_start()는 필수예요!
Q 로그인 상태를 로그아웃으로 끊는 방법은?

세션을 삭제하면 됩니다. session_destroy()를 호출하면 로그인 상태가 사라지고, 로그아웃 처리가 완료됩니다.

A 로그아웃 = session_destroy()! 간단하죠?
Q 로그인 실패 시 왜 아무 반응도 없을까요?

조건문이 틀렸거나, else 문이 누락됐을 가능성이 커요. 또는 입력값이 비어 있을 수도 있으니 var_dump()로 확인해보세요.

A 디버깅은 var_dump()가 최고입니다!

 

처음에는 로그인 시스템이 정말 복잡해 보였죠? HTML 폼, PHP 처리, 세션, 에러 처리, 보안까지… 하나하나 연결되다 보면 어느새 진짜 웹 개발자가 된 느낌이 듭니다. 저도 처음 로그인 구현할 때 “왜 안 되는 거지?” 하며 디버깅만 하루 종일 했던 기억이 나요. 그런데 한 번 이해하고 나니까 그 뒤로는 응용이 훨씬 쉬워졌어요. 결국 로그인은 사용자의 신원을 확인하고, 그 상태를 유지해주는 기본 구조에요. 오늘 이 포스트를 따라하며 직접 코드를 짜보셨다면, 여러분은 이미 웹 애플리케이션의 핵심을 이해한 겁니다. 자신감을 갖고, 더 나아가 회원가입, 비밀번호 변경, 인증 메일 같은 기능도 도전해보세요! 💜

728x90