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>

Related Posts

PHP / 회원 관리 / 비밀번호 변경 페이지

PHP / 회원 관리 / 비밀번호 변경 페이지

change-password.php $_SESSION의 값으로 로그인 여부를 판단합니다. 로그인 상태가 아니라면 로그인 페이지로 이동합니다. 로그인 상태라면 $current_password의 값으로 새 비밀번호를 입력했는지 확인합니다. 새 비밀번호를 입력했다면 현재 비밀번호가 맞는지 확인합니다. 맞지 않다면 '현재 비밀번호가 틀렸습니다.'를 출력합니다. 현재 비밀번호가 맞다면 새로 입력한 비밀번호 두 개가 일치하는지 확인합니다.일치하지 않는다면 '새 비밀번호가 일치하지 않습니다.'를 출력합니다. 새 비밀번호 두 개가 ...

PHP / include(), include_once(), require(), require_once() / 외부 파일 포함하는 함수

PHP / include(), include_once(), require(), require_once() / 외부 파일 포함하는 함수

외부 파일을 포함하는 함수 여러 파일에 공통적으로 사용하는 코드는 별도의 파일로 만든 후 각 파일에서 불러오는 것이 좋습니다. 코드의 양이 줄어들고, 수정이 용이하기 때문입니다. 외부 파일을 포함시키는 함수는 네가지가 있습니다. include 같은 파일 여러 번 포함 가능 / 포함할 파일이 없어도 다음 코드 실행 include_once 같은 파일 한 번만 포함 / 포함할 파일이 없어도 다음 코드 ...

PHP / 연산자 / 논리 연산자

PHP / 연산자 / 논리 연산자

$a and $b $a와 $b가 모두 TRUE이면 TRUE를 반환합니다. $a or $b $a 또는 $b가 TRUE이면 TRUE를 반환합니다. 주의할 점은 둘 다 TRUE일 때도 TRUE라는 것입니다. 즉, 둘 다 FALSE일 때만 FALSE입니다. $a xor $b $a와 $b 중 하나만 TRUE일 때만 TRUE를 반환합니다. ! $a $a가 TRUE가 아니면 TRUE를 반환합니다. $a && $b $a와 $b가 모두 TRUE이면 TRUE를 반환합니다. $a ...

PHP / MariaDB / 데이터베이스에 데이터 입력하기

PHP / MariaDB / 데이터베이스에 데이터 입력하기

이 강좌에서 사용하는 데이터베이스는 employees입니다. (employees 설치 하기) 폼(Form) 만들기 - employees_add.php 데이터를 입력할 폼을 만듭니다.(number, date 타입과 required는 HTML5부터 지원합니다.) 값은 employees_insert.php로 전송됩니다. <form action="employees_insert.php" method="POST"> <p><input type="number" name="emp_no" placeholder="NO" required></p> <p><input type="date" name="birth_date" required></p> <p><input type="text" name="first_name" placeholder="First Name" required></p> <p><input type="text" name="last_name" placeholder="Last Name" required></p> <p><select name="gender" ...

PHP / 함수 / substr() / 문자열의 일부분을 추출하는 함수

PHP / 함수 / substr() / 문자열의 일부분을 추출하는 함수

개요 substr()은 문자열의 일부분을 추출하는 함수입니다. PHP 4 이상에서 사용할 수 있습니다. 문법 substr( string, start ) string : 추출의 대상이 되는 문자열입니다. start : 추출을 시작하는 위치입니다. length : 추출할 문자의 개수입니다. 값이 없으면 문자열의 끝까지 추출합니다. 음수일 때는 위치를 뜻하고, 그 위치 앞까지의 문자를 추출합니다. substr( 'abcdefg', 3 ); abcdefg에서 3 위치의 문자는 d입니다. ...

PHP / $_GET, $_POST - 양식(form)으로 전송된 데이터 받기

PHP / $_GET, $_POST - 양식(form)으로 전송된 데이터 받기

GET과 POST HTML의 form을 이용하여 값을 전송하는 방식은 get과 post 두 가지가 있습니다. PHP로 그 값을 받아서 사용하는 방법을 알아봅니다. GET 방식으로 전송한 경우 다음은 GET 방식으로 값을 전송하는 간단한 예제입니다. form.php <!doctype html> <html lang="ko"> <head> <meta charset="utf-8"> <title>HTML</title> <style> * { ...

PHP / 함수 / explode() / 문자열을 분할하여 배열로 저장하는 함수

PHP / 함수 / explode() / 문자열을 분할하여 배열로 저장하는 함수

개요 explode()는 문자열을 분할하여 배열로 저장하는 함수입니다. PHP 4 이상에서 사용할 수 있습니다. 문법 explode ( delimiter, string ) delimiter : 문자열을 분할할 기준을 정합니다. string : 분할할 문자열입니다. limit : 옵션으로, 분할할 개수를 정합니다. 정수를 입력합니다. $jbstring = 'one two three four'; $jbexplode = explode( ' ', $jbstring ); 문자열 jbsrting을 공백을 기준으로 구분하여 배열 jbexplode에 ...

PHP / 연산자 / 비교 연산자

PHP / 연산자 / 비교 연산자

비교 연산자는 두 값을 비교하는 연산자입니다. $a == $b $a와 $b가 같으면 TRUE를 반환합니다. 예를 들어 $a = 123; $b = 123; 이면 TRUE입니다. 또한 $a = 123; $b = '123'; 일 때도 TRUE입니다. $a === $b $a와 $b가 같고, 자료형도 같아야 TRUE를 반환합니다. 예를 들어 $a = 123; $b = 123; 이면 TRUE입니다. 하지만 $a = 123; $b = '123'; 은 FALSE입니다. $a != $b $a가 $b와 같지 ...

PHP / 함수 / 날짜, 시간 / date(), localtime(), mktime(), time()

PHP / 함수 / 날짜, 시간 / date(), localtime(), mktime(), time()

date() 개요 Timestamp를 원하는 형식으로 출력하는 함수입니다. 문법 date( format, timestamp ) format : 필수 항목입니다. 출력할 형식을 정합니다. timestamp : 선택 항목입니다. 값이 없으면 현재 timestamp를 사용합니다. 예제 <!doctype html> <html lang="ko"> <head> <meta charset="utf-8"> <title>PHP</title> <style> body { ...

PHP / 함수 / password_verify() / password_hash()로 만든 암호화된 문자열이 입력한 비밀번호와 같은지 확인하는 함수

PHP / 함수 / password_verify() / password_hash()로 만든 암호화된 문자열이 입력한 비밀번호와 같은지 확인하는 함수

개요 password_verify()는 password_hash()로 암호화한 비밀번호가 사용자가 입력한 값과 같은지 확인하는 함수입니다. 암호화된 문자열을 원래 문자열로 바꾸는 것이 아니고, 단지 같은지 다른지를 비교하여 TRUE 또는 FALSE를 반환합니다. 문법 password_verify ( string $password , string $hash ) $password : 사용자가 입력한 비밀번호입니다. $hash : password_hash()로 암호화된 문자열입니다. 예제 password_hash() 함수로 mypw를 암호화하고 변수 encrypted_password에 저장합니다. $encrypted_password = password_hash( 'mypw', PASSWORD_DEFAULT ...

PHP 강좌