본문 바로가기
카테고리 없음

Php로 웹 개발하기 : 세션 설정

by madevth 2021. 10. 20.
반응형

로그인 기능을 만들다 보니 의문점이 들었다.

if($result = mysqli_fetch_array(mysqli_query($conn, $sql))){
    header('Location: mainpage.php');
} else{
    echo "<script>alert('등록되지 않은 사용자입니다.')</script>";
    echo "<script>window.location.href='index.html';</script>";
}

아이디와 패스워드가 일치하면 mainpage.php 페이지로 넘어가게 해 두었는데,

그렇게 하면 http://localhost/mainpage.php 경로로 바로 들어와도 메인 페이지로 들어올 수가 있다.

로그인을 하지 않았다면 메인 페이지로 들어올 수 없도록 코드를 수정해보자!!

 

1) 로그인을 하면 $_SESSION['id']에 아이디를 저장해둔다. 

2) 메인 페이지에서는 $_SESSION['id'] 값이 존재하는지 체크한다.

3) 존재하면 통과, 없으면 못 들어오게 하기

 

① 세션 값 저장하기

우선 로그인에 성공하면 세션 값을 저장하자.

세션 값을 전역 변수로 사용하기 위해서는 session_start();를 넣어주어야 한다.

if($result = mysqli_fetch_array(mysqli_query($conn, $sql))){
    session_start();
    $_SESSION['id'] = $username;
    header('Location: mainpage.php');
} else{
    echo "<script>alert('등록되지 않은 사용자입니다.')</script>";
    echo "<script>window.location.href='index.html';</script>";
}

그 후 메인 페이지에서 세션 값을 검사하자.

<body>
    <?php
        session_start();
        if (isset($_SESSION['id'])){
            echo "<h2>Welcome {$_SESSION['id']}!! This is Main Page.</h2>";
    ?>
    <button onClick = "document.location.href = 'index.html';">Logout</button>
    <?php
        }else{
            echo "<script>alert('잘못된 접근입니다.'); history.back();</script>";
        }
    ?>
</body>

바로 메인 페이지로 들어오면 세션 값이 존재하기 않기 때문에 잘못된 접근이라는 경고창이 뜬다.

 

근데 이렇게 하면 로그아웃 후에도 세션 값이 남아있기 때문에 한번 로그인을 한 후라면 URL로 메인 페이지 접근이 다시 가능해진다. 로그아웃 버튼을 누르면 세션 값을 지워주자.

 

② 세션 값 지우기

버튼의 onClick에서 함수를 호출하고 그 함수에서 session_destroy();와 index.html로 돌아가는 로직을 넣었는데 잘 동작하지 않았다. 그래서 기존에 index.html로 가는 코드를 mainpage.php로 오게 하되 뒤에 파라미터로 session=true를 붙여주었다.

<?php
    session_start();
    if(isset($_GET['session'])){
        session_destroy();
        echo "<script>window.location.href='index.html';</script>";
    }
    if (isset($_SESSION['id'])){
        echo "<h2>Welcome {$_SESSION['id']}!! This is Main Page.</h2>";
?>
<button onClick = "document.location.href = 'mainpage.php?session=true';">Logout</button>
<?php
    }else{
        echo "<script>alert('잘못된 접근입니다.'); history.back();</script>";
    }
?>

그 후에 $_GET ['session']으로 session 파라미터의 값을 받아와서 true일 경우(=로그아웃 버튼을 누른 경우) 세션 값을 지우고 index.html로 넘기는 코드를 추가해주었다.

 

③ 결과 확인

1. 바로 mainpage.php로 이동할 때

2. test 계정으로 로그인할 때

반응형

댓글