필요없는 목록/PHP

로그인, 로그아웃 만들어보기

비밀안 2023. 4. 19. 19:43

학원에서 배운 PHP 로그인 화면입니다.

배우면서 많이 안되는 부분이 있어서 답답했던적이 많았네요.

그래도 그덕에 학원 수업을 이해를 많이하게 된 것 같아요.

로그인.php코드

<main id="main" class="container">
    <div class="login__inner">
        <h2>로그인</h2>
        <p>로그인을 하시면 게시글 및 댓글 작성이 가능합니다.<br>회원가입을 하면 로그인이 가능합니다.<br>admin@admin.com/1234</p>
        <div class="login__form btStyle bmStyle">
            <form action="loginSave.php" name="loginSave" method="post">
                <fieldset>
                    <legend class="blind">로그인 영역</legend>
                    <div>
                        <label for="youEmail" class="blind required">이메일</label>
                        <input type="email" id="youEmail" name="youEmail" class="inputStyle" placeholder="이메일" required>
                    </div>
                    <div>
                        <label for="youPass" class="blind required">비밀번호</label>
                        <input type="password" id="youPass" name="youPass" class="inputStyle" placeholder="비밀번호" required>
                    </div>
                    <button type="submit" class="btnStyle2 mt20">로그인</button>
                </fieldset>
            </form>
        </div>
        <div class="login__footer">
            <ul class="listStyle">
                <li>회원가입을 하지 않았다면 회원가입을 먼저 해주세요! <a href="join.html">회원가입</a></li>
                <li>아이디가 기억이 나지 않는다면! <a href="#">아이디 찾기</a></li>
                <li>비밀번호가 기억이 나지 않는다면! <a href="#">비밀번호 찾기</a></li>
            </ul>
        </div>
    </div>
</main>

코드설명

1.form이 중요하니간 form부터 보는게 좋을 것 같습니다.

2. form의 action에다가 경로를 입력하면 버튼 클릭시 그 경로로 이동을 합니다.

3. input에다가 내용을 입력하고 button을 클릭하면 form요소에 내용을 전달합니다.

(세션.php쪽입니다. 여기에는 데이터를 비교 후 세션에 전달합니다.)

(에러가 많이 뜬덕에 억지로 코드를 이해하게 되었어요.~~)

(아직도 못 고쳤네요.)

세션.php코드

<main id="main" class="container">
    <div class="intro__inner center bmStyle">
        <picture class="intro__images">
            <source srcset="../assets/img/joinEnd01.png, ../assets/img/joinEnd01@2x.png 2x, ../assets/img/joinEnd01@3x.png 3x" />
            <img src="../assets/img/joinEnd01.png" alt="회원가입 이미지">
        </picture>
        
        <?php
            include "../connect/connect.php";
            include "../connect/session.php";


            $youEmail = $_POST['youEmail'];
            $youPass = $_POST['youPass'];
            // echo $youEmail, $youPass;

            // 데이터 출력
            function msg($alert){
                echo "<p class='intro__text'>$alert</p>";
            }
            // 데이터 조회
            $sql = "SELECT memberID, youEmail, youName, youPass FROM members WHERE youEmail = '$youEmail' AND youPass = '$youPass'";
            $result = $connect -> query($sql);
            if($result){
                $count = $result -> num_rows;

                if($count == 0){
                    msg("이메일 또는 비밀번호가 틀렸습니다. 다시 한번 확인해주세요!<br><div class=`intro__btn`><a href=`#`></a></div>");
                }
                else {
                    // 로그인 성공
                    $memberInfo = $result -> fetch_array(MYSQL_I_ASSOC);

                    // echo "<pre>";
                    // var_dump($memberInfo);
                    // echo "</pre>";

                    // 세션 생성
                    $_SESSION['memberID'] = $memberInfo['memberID'];
                    $_SESSION['youEmail'] = $memberInfo['youEmail'];
                    $_SESSION['youName'] = $memberInfo['youName'];

                    Header("Location: ../main/main.php");
                }
            }
        ?>
    </div>
    <!-- //intro__inner  -->
</main>
<!-- //main -->

코드설명

1.$_POST는 전달받은 폼요소의 데이터를 $youEmail과 $youPass에 저장합니다.

2. $sql로 SELECT문으로 값들을 가져와서 저장합니다. 그리고 query문으로 데이터베이스 전달합니다.

3.if문으로 로그인이 실패 여부를 확인 합니다.

4.else문으로 로그인 성공여부를 확인합니다.

 

★세션은 다음과 같은 순서로 작동합니다:

  1. 세션 시작: PHP 코드로 session_start() 함수를 호출하여 세션을 시작합니다. 이 함수를 호출하면 세션 ID가 생성되고, 필요한 경우 서버에 세션 데이터를 저장하기 위한 공간이 할당됩니다.
  2. 세션 데이터 저장: PHP 코드에서 $_SESSION 배열을 사용하여 세션 데이터를 저장할 수 있습니다. 이 배열은 서버에 저장되는 세션 데이터를 나타냅니다. 예를 들어, $_SESSION['username'] = 'john'과 같이 사용자의 로그인 이름을 세션 데이터로 저장할 수 있습니다.
  3. 세션 데이터 사용: 세션 데이터는 다른 PHP 페이지에서도 사용할 수 있습니다. $_SESSION 배열을 사용하여 세션 데이터에 접근하고, 필요에 따라 값을 변경하거나 사용자 상태를 확인할 수 있습니다.
  4. 세션 종료: 세션을 더 이상 사용하지 않을 때에는 session_destroy() 함수를 호출하여 세션을 종료할 수 있습니다. 이 함수를 호출하면 세션 데이터가 삭제되고 세션 ID가 무효화됩니다.

 

로그아웃.php코드

<?php
    include "../connect/session.php";

    unset($_SESSION['memberID']);
    unset($_SESSION['youEmail']);
    unset($_SESSION['youName']);

    Header("Location: ../main/main.php");
?>

코드설명

1. unset으로 세션에 저장된 변수를 제거합니다.

(PHP에서 unset() 함수는 변수나 배열 요소를 삭제하는 데 사용되는 내장 함수입니다. unset() 함수를 사용하여 변수나 배열 요소를 삭제하면 해당 변수나 배열 요소는 메모리에서 제거되어 사용할 수 없게 됩니다.)