[PHP] 회원가입, 로그인 기능 만들기 (7/8) - 로그인 기능 만들기

2022. 10. 24. 02:42무료강좌&튜토리얼/PHP

[PHP] 회원가입, 로그인 기능 만들기 (7/8) - 로그인 기능 만들기

 

로그인 정보를 받아서 로그인 기능을 생성해보자.

로그인 정보(이메일 주소, 비밀번호)를 받으면 member 테이블에서 이메일 주소와 비밀번호가 모두 일치하는 레코드가 있는지 확인한다. 일치하는 레코드가 있다면 세션을 생성하며 일치하는 정보가 없다면 '아이디 혹은 비밀번호가 일치하지 않습니다.'라는 문구를 출력하게 한다.

 

회원가입 기능을 생성할 때 비밀번호를 sha1() 함수를 사용하여 암호화 하였고, 비밀번호 앞에 [php200] 문구를 사용했다. 로그인 기능도 마찬가지로 비밀번호 앞에 [php200] 문구를 붙여서 sha1() 함수를 사용해 암호화된 값으로 변경하여 쿼리문에 사용한다.

 

다음은 로그인을 처리하는 예제이다.

[예제: 176_signInProcess.php ]

<?php
    include $_SERVER['DOCUMENT_ROOT'].'/php/common/171_session.php';
    include $_SERVER['DOCUMENT_ROOT'].'/php/cssControlPanel/163_connection.php';

    $email = $_POST['userEmail'];
    $pw = $_POST['userPw'];

    function goSignInPage($alert) {
      echo $alert.'<br>';
      echo "<a href='./175_signInForm.php'>로그인 폼으로 이동</a>";
      return;
    }

    // 유효성 검사
    // 이메일 검사
    if(!filter_Var($email, FILTER_VALIDATE_EMAIL)) {
      goSignInPage('올바른 이메일이 아닙니다.');
      exit;
    }

    // 비밀번호 검사
    if($pw == null || $pw == '') {
      goSignInPage('비밀번호를 입력해 주세요.');
      exit;
    }

    $pw = sha1('php200'.$pw);

    $sql = "SELECT email, nickName, memberID FROM member WHERE email = '{$email}' AND pw = '{$pw}'";
    $result = $dbConnect->query($sql);

    if($result) {
      if($result->num_rows == 0) {
        goSignInPage('로그인 정보가 일치하지 않습니다.');
        exit;
      } else {
        $memberInfo = $result->fetch_array(MYSQLI_ASSOC);
        $_SESSION['memberID'] = $memberInfo['memberID'];
        $_SESSION['nickName'] = $memberInfo['nickName'];
        Header("Location:../index.php");
      }
    } 
?>

1. 로그인에 성공하면 세션을 생성하므로 [171_session.php] 파일을 include 한다.

2. 이메일 주소와 비밀번호를 변수에 대입한다.

3. goSignInPage() 함수는 이메일 주소가 유효성에 접합하지 않거나 로그인 정보가 다른 경우 알림 문구를 출력하고 로그인 폼으로 이동하는 링크를 출력하는 기능을 한다.

4. 이메일 주소의 유효성을 검사한다.

5. 비밀번호가 공백인지 검사한다.

6. 회원가입할 때 암호화한 비밀번호와 같은 값이 되도록 같은 방법으로 입력받은 비밀번호를 암호화한다.

7. 이메일과 비밀번호가 모두 일치하는 레코드를 불러오는 쿼리문을 생성한다.

8. 쿼리문을 실행하여 불러온 데이터의 수가 0이면 일치하는 레코드가 없다는 의미이므로 로그인에 실패하게 된다.

9. 불러온 데이터의 수가 0이 아니면 일치하는 레코드가 있음을 의미하므로 세션을 생성한 후 메인페이지로 이동한다.

 

 


 

 

 

초보자를 위한 PHP 200제
김태영 지음 | 정보문화사