PHP / Session / 로그인, 로그아웃, 로그인 상태에서만 보이는 콘텐츠 만들기
PHP의 세션을 이용하여 로그인, 로그아웃을 만들 수 있습니다. 그리고 로그인한 사용자만 볼 수 있는 콘텐츠를 만들 수도 있습니다. 다음은 이를 구현한 아주 간단한 예제입니다.
inc_head.php
- 모든 페이지에 들어갈 코드입니다. include 함수로 각 페이지에서 불러올 것입니다.
- 세션의 username 값이 있다면, 즉 로그인 상태라면 $jb_login에 TRUE를 할당합니다.
<?php session_start(); if( isset( $_SESSION[ 'username' ] ) ) { $jb_login = TRUE; } ?>
login.php
- 로그인 상태라면 '이미 로그인하셨습니다.'를 출력하고, 로그인 상태가 아니라면 Username과 Password를 입력하는 폼이 나옵니다.
<?php include 'inc_head.php'; ?> <!doctype html> <html lang="ko"> <head> <meta charset="utf-8"> <title>PHP</title> </head> <body> <?php if ( $jb_login ) { ?> <h1>이미 로그인하셨습니다.</h1> <?php } else { ?> <h1>로그인</h1> <form action="login_result.php" method="POST"> <input type="text" name="username" placeholder="Username"> <input type="password" name="password" placeholder="Password"> <button>Submit</button> </form> <?php } ?> </body> </html>
login_result.php
- 로그인 페이지에서 Submit 버튼을 클릭했을 때 연결되는 페이지입니다.
- 로그인 상태라면 '이미 로그인하셨습니다.'를 출력하고, 로그인 상태가 아니라면 Username과 Password를 검증합니다.
- 실제 서비스에서는 DB에 있는 정보와 비교하겠지만, 여기서는 qwe, 123과 비교하였습니다.
- 입력한 정보가 맞다면 'Hi!'를, 맞지 않다면 '사용자 이름 또는 비밀번호가 틀렸습니다.'를 출력합니다.
<?php include 'inc_head.php'; ?> <!doctype html> <html lang="ko"> <head> <meta charset="utf-8"> <title>PHP</title> </head> <body> <?php if ( $jb_login ) { echo '<h1>이미 로그인하셨습니다.</h1>'; } else { $username = $_POST[ 'username' ]; $password = $_POST[ 'password' ]; if ( $username == 'qwe' and $password == '123' ) { $_SESSION[ 'username' ] = $username; echo '<h1>Hi!</h1>'; } else { echo '<p>사용자 이름 또는 비밀번호가 틀렸습니다.</p>'; } } ?> </body> </html>
logout.php
- 로그인 상태에서 이 페이지에 접속하면 로그아웃합니다.
<?php include 'inc_head.php'; ?> <!doctype html> <html lang="ko"> <head> <meta charset="utf-8"> <title>PHP</title> </head> <body> <?php if ( $jb_login ) { session_destroy(); echo '<h1>로그아웃 하였습니다.</h1>'; } else { echo '<h1>로그인 상태가 아닙니다.</h1>'; } ?> </body> </html>
content.php
- 로그인 상태라면 '안녕하세요.'를, 로그인 상태가 아니라면 '로그인하세요.'를 출력합니다.
<?php include 'inc_head.php'; ?> <!doctype html> <html lang="ko"> <head> <meta charset="utf-8"> <title>PHP</title> </head> <body> <?php if ( $jb_login ) { echo '<h1>안녕하세요.</h1>'; } else { echo '<h1>로그인하세요.</h1>'; } ?> </body> </html>