로그인 기능을 만들다 보니 의문점이 들었다.
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 계정으로 로그인할 때
댓글