PHP 마법 학교 3기 4강: 성문을 열어라! ‘로그인과 세션(Session) 마법’

안녕하세요! 가족과 함께하는 스마트 라이프입니다. 지난 시간에는 우리 학교의 보물 창고(DB)에 마법사들의 정보를 저장하는 법을 배웠죠? 오늘은 저장된 정보를 확인하고, 학교 성문을 활짝 열어주는 ‘로그인’과 내가 누구인지 계속 기억하게 해주는 ‘세션(Session)’ 마법을 배워보겠습니다!

PHP 마법 학교 3기 4강: 성문을 열어라! '로그인과 세션(Session) 마법'

1. 로그인은 어떻게 이루어지나요? ‘암호 대조 마법’

로그인은 단순해요. 사용자가 입력한 아이디와 비밀번호가 우리 보물 창고(DB)에 있는 정보와 똑같은지 확인하는 과정이죠. 하지만 비밀번호는 우리가 암호화(password_hash)해서 저장했기 때문에, password_verify라는 특별한 돋보기 마법을 써서 확인해야 한답니다.

2. 로그인과 세션 유지 주문서 (코드)

아이디와 비번을 확인하고, 로그인이 성공하면 ‘세션’이라는 마법 주머니에 이름을 저장하는 코드를 작성해 봅시다.

<?php
  // login_check.php
  session_start(); // 1. 세션 마법 주머니 열기!

  $userid = $_POST['wizard_id'];
  $userpw = $_POST['wizard_pw'];

  // 2. DB 연결 (지난 시간과 같아요)
  $conn = mysqli_connect("localhost", "root", "비밀번호", "magic_school");

  // 3. 창고에서 해당 아이디 찾기
  $sql = "SELECT * FROM wizards WHERE userid = '$userid'";
  $result = mysqli_query($conn, $sql);
  $row = mysqli_fetch_assoc($result);

  // 4. 비밀번호 돋보기 마법으로 대조하기
  if ($row && password_verify($userpw, $row['password'])) {
      // 로그인 성공! 세션 주머니에 이름표 넣기
      $_SESSION['username'] = $userid;
      echo "<script>alert('성문이 열렸습니다! 어서오세요, " . $userid . " 마법사님!'); location.href='main.php';</script>";
  } else {
      echo "<script>alert('암호가 틀렸거나 없는 마법사입니다!'); history.back();</script>";
  }
?>

3. 세션(Session)이란 무엇인가요? ‘투명한 이름표’

웹사이트는 금방 까먹는 버릇이 있어요. 페이지를 옮길 때마다 “너 누구니?”라고 물어보죠. 이때 세션(Session) 마법을 쓰면, 서버가 마법사의 등에 ‘투명한 이름표’를 붙여줘요. 덕분에 페이지를 돌아다녀도 서버가 우리를 계속 알아보고 로그인을 유지해준답니다.

PHP 마법 학교 3기 4강: 성문을 열어라! '로그인과 세션(Session) 마법'

4. 아이들과 함께하는 ‘자유이용권’ 놀이

놀이공원에 갔다고 상상해 보세요. 입구에서 표를 검사하고(로그인), 손목에 띠(세션)를 둘러주죠. 이제 이 띠만 보여주면 어떤 놀이기구든 다시 검사받지 않고 탈 수 있어요. “이 손목띠가 바로 세션이야!”라고 설명해 주세요. 아이는 로그인 유지의 원리를 놀이공원 자유이용권처럼 쉽고 재미있게 이해하게 됩니다.

마치며: 이제 진정한 회원제 서비스!

축하합니다! 이제 여러분의 홈페이지는 회원가입을 받고, 로그인한 사람만 들어올 수 있는 진짜 서비스의 모습을 갖추게 되었습니다. 정말 감격스럽지 않나요? 다음 시간에는 로그인한 마법사들만 쓸 수 있는 ‘비밀 게시판: 마법 주문 공유하기’를 만들어보겠습니다. 다음 시간에 만나요!