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>
같은 카테고리의 다른 글
PHP / 함수 / empty() / 비어있는 변수인지 검사하는 함수

PHP / 함수 / empty() / 비어있는 변수인지 검사하는 함수

개요 empty로 변수가 비어있는지 검사합니다. PHP 4 이상에서 사용할 수 있습니다. 문법 empty( $var ) $var가 비어있는지 검사하고, 비어있다면 TRUE, 비어있지 않다면 FALSE를 반환합니다. 다음을 비어있는 것으로 판단합니다. "" (빈 문자열) 0 (정수 0) "0" (문자열 0) NULL FALSE array() (빈 배열) var $var; (클래스 안에서 값 없이 선언된 변수) 예제 <!doctype html> <html lang="ko">   <head>     <meta charset="utf-8">     <title>Coding Factory</title>     <style>       p {         font-family: "Times New ...

PHP / 회원 관리 / 로그인 페이지, 로그인 완료 페이지

PHP / 회원 관리 / 로그인 페이지, 로그인 완료 페이지

로그인 페이지 - login.php 페이지를 열면 POST 방식으로 넘어온 username과 password를 저장합니다. $username에 값이 없다면 이후의 PHP 코드는 실행되지 않습니다. 양식에 값을 입력하고 로그인 버튼을 클릭하면 $username에 값이 있으므로 이후의 PHP 코드가 실행됩니다. $username에 값이 있다면 DB에서 username에 해당하는 password를 가져와서 $encrypted_password에 저장합니다. 일치하는 username이 존재하지 않는다면 $encrypted_password의 값이 없으므로 '사용자이름이 존재하지 않습니다.'를 출력합니다. 일치하는 username이 ...

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

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

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

PHP / 연산자 / 할당 연산자

PHP / 연산자 / 할당 연산자

PHP의 할당 연산자는 =이다. 등호 오른쪽을 등호 왼쪽에 저장한다.('같다'를 표현할 때는 ==를 사용한다.) 변수 a에 10을 할당한다. $a = 10; 여러 번 할당하면 마지막에 할당된 것이 값이 된다. 즉 변수 a의 값은 20이다. $a = 10; $a = 20; 기존 값을 사용할 수 있다. 변수 a의 값은 20이다. $a = 10; $a = $a + 10;

PHP / 에러 출력하는 방법, 에러 출력하지 않는 방법

PHP / 에러 출력하는 방법, 에러 출력하지 않는 방법

PHP 코딩을 하고 웹 브라우저에서 실행을 시킵니다. 그런데 원하는 결과가 나오지 않거나 '페이지를 표시할 수 없습니다' 같은 메시지가 나오는 경우가 있습니다. 반대로 결과를 도출하는 데는 문제가 없으나 에러 메시지가 나오는 경우가 있습니다. 보통 개발 과정에서는 어떤 에러든 표시하는 게 좋고, 서비스 중이라면 왠만한 에러는 보이지 않는 게 좋습니다. 어떻게 에러 표시 여부를 ...

PHP / 함수 / isset() - 설정된 변수인지 확인하는 함수

PHP / 함수 / isset() - 설정된 변수인지 확인하는 함수

개요 isset으로 변수가 설정되었는지 확인할 수 있습니다. PHP 4 이상에서 사용할 수 있습니다. 문법 isset( $var ); $var가 설정되었는지 확인하고, 설정되었으면 TRUE, 설정되지 않았으면 FALSE를 반환합니다. isset( $var1, $var2, ... ); $var1, $var2, …이 설정되었는지 확인합니다. 모든 변수가 설정되었으면 TRUE, 그렇지 않다면 FALSE를 반환합니다. 예제 <!doctype html> <html lang="ko"> <head> <meta charset="utf-8"> <title>Coding ...

PHP / 함수 / strpos() / 문자열 안에서 특정 문자열 위치 반환하는 함수

PHP / 함수 / strpos() / 문자열 안에서 특정 문자열 위치 반환하는 함수

strpos()는 문자열 안에서 특정 문자열의 위치를 반환하는 함수이다. 문법 strpos(string $haystack, string $needle, int $offset = 0) haystack : 검색 대상이 되는 문자열 needle : 찾을 문자열 offset : 검색 시작 위치 찾을 문자열이 있다면 그 위치를 반환하고, 없다면 false를 반환한다. 예제 123456789에서 1의 위치를 반환한다. 값은 0이다. strpos( "123456789", "1" ) 123456789에서 2의 위치를 반환한다. 값은 1이다. strpos( "123456789", "2" ...

PHP / number_format() / 숫자 표현 형식 정하는 함수

PHP / number_format() / 숫자 표현 형식 정하는 함수

number_format() 함수로 숫자의 표현 형식을 정한다. 천 단위 쉼표를 찍을 수도 있고, 소숫점 아래 표시할 숫자의 개수를 정할 수도 있다. <!doctype html> <html lang="ko"> <head> <meta charset="utf-8"> <title>PHP</title> <style> body { ...

PHP / 회원 관리 / 세션(SESSION) 추가하기, 로그아웃 페이지

PHP / 회원 관리 / 세션(SESSION) 추가하기, 로그아웃 페이지

login.php 로그인 한 상태인지 로그인 하지 않은 상태인지 파악하기 위해 login-ok.php로 넘어가기 전에 세션을 시작합니다. 그리고 username을 $_SESSION에 담습니다. <?php $username = $_POST; $password = $_POST; if ( !is_null( $username ) ) { $jb_conn = mysqli_connect( 'localhost', 'codingfactory', '1234qwer', 'codingfactory.net_example' ...

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

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

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