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

login.php

  • 로그인 한 상태인지 로그인 하지 않은 상태인지 파악하기 위해 login-ok.php로 넘어가기 전에 세션을 시작합니다. 그리고 username을 $_SESSION[ 'username' ]에 담습니다.
<?php
  $username = $_POST[ 'username' ];
  $password = $_POST[ 'password' ];
  if ( !is_null( $username ) ) {
    $jb_conn = mysqli_connect( 'localhost', 'codingfactory', '1234qwer', 'codingfactory.net_example' );
    $jb_sql = "SELECT password FROM member WHERE username = '" . $username . "';";
    $jb_result = mysqli_query( $jb_conn, $jb_sql );
    while ( $jb_row = mysqli_fetch_array( $jb_result ) ) {
      $encrypted_password = $jb_row[ 'password' ];
    }
    if ( is_null( $encrypted_password ) ) {
      $wu = 1;
    } else {
      if ( password_verify( $password, $encrypted_password ) ) {
        session_start();
        $_SESSION[ 'username' ] = $username;
        header( 'Location: login-ok.php' );
      } else {
        $wp = 1;
      }
    }
  }
?>
<!doctype html>
<html lang="ko">
  <head>
    <meta charset="utf-8">
    <title>로그인</title>
    <style>
      body { font-family: sans-serif; font-size: 14px; }
      input, button { font-family: inherit; font-size: inherit; }
    </style>
  </head>
  <body>
    <h1>로그인</h1>
    <form action="login.php" method="POST">
      <p><input type="text" name="username" placeholder="사용자이름" required></p>
      <p><input type="password" name="password" placeholder="비밀번호" required></p>
      <p><input type="submit" value="로그인"></p>
      <?php
        if ( $wu == 1 ) {
          echo "<p>사용자이름이 존재하지 않습니다.</p>";
        }
        if ( $wp == 1 ) {
          echo "<p>비밀번호가 틀렸습니다.</p>";
        }
      ?>
    </form>
  </body>
</html>

login-ok.php

  • $_SESSION[ 'username' ]의 값을 $session_username에 저장합니다.
  • $session_username에 값이 없으면 login.php로 이동합니다.
  • 값이 있으면 사용자이름과 함께 '로그인 하셨습니다.'를 출력합니다.
  • [로그아웃]을 클릭하면 logout.php로 이동합니다.
<?php
  session_start();
  $session_username = $_SESSION[ 'username' ];
  if ( is_null( $session_username ) ) {
    header( 'Location: login.php' );
  }
?>
<!doctype html>
<html lang="ko">
  <head>
    <meta charset="utf-8">
    <title>로그인</title>
    <style>
      body { font-family: sans-serif; font-size: 14px; }
      input, button { font-family: inherit; font-size: inherit; }
    </style>
  </head>
  <body>
    <h1><?php echo $session_username; ?>님, 로그인 하셨습니다.</h1>
    <a href="logout.php">로그아웃</a>
  </body>
</html>

logout.php

  • 세션을 종료하고 login.php로 이동합니다.
<?php
  session_start();
  session_destroy();
  header( 'Location: login.php' );
?>
같은 카테고리의 다른 글
PHP / Ubuntu / Apache / HTML 확장자에도 PHP 코드 인식되도록 설정하는 방법

PHP / Ubuntu / Apache / HTML 확장자에도 PHP 코드 인식되도록 설정하는 방법

Ubuntu에 Apache로 웹서버를 만들고 PHP를 사용할 수 있게 만든 경우, 기본적으로 확장자가 php인 경우에만 PHP 코드를 인식합니다. 만약 확장자가 html일 때로 PHP 코드가 인식되도록 하고 싶다면, Apache 설정을 바꿔줘야 합니다. /etc/apache2/mods-enabled/mime.conf 파일을 엽니다. 다음 코드를 추가합니다. AddType application/x-httpd-php .html 확장자가 htm인 경우에도 PHP를 인식하도록 하고 싶다면 다음처럼 합니다. AddType application/x-httpd-php .html .htm 웹서버를 다시 로드합니다. service apache2 ...

PHP / MariaDB / 데이터베이스에서 데이터 삭제하기

PHP / MariaDB / 데이터베이스에서 데이터 삭제하기

이 강좌에서 사용하는 데이터베이스는 employees입니다. (employees 설치 하기) 직원 추가 데이터베이스에 데이터 입력하기 강좌에 있는 방식으로 직원을 추가합니다. 연봉, 직책 등이 연결된 기존 직원을 삭제하면 문제가 생길 수 있으므로, 새로 직원을 추가한 후 그 직원을 삭제합니다. 직원 삭제하기 - employees.php 직원 정보를 출력하는 페이지에 직원을 삭제하는 기능을 추가해보겠습니다. Delete 버튼을 클릭하면 바로 삭제되고 페이지가 다시 ...

PHP / 당월 초일, 당월 말일 구하는 방법

PHP / 당월 초일, 당월 말일 구하는 방법

당월 초일과 당월 말일은 date() 함수를 이용하여 구할 수 있다. 초일은 항상 1일이므로, 아래처럼 날짜에 01을 넣어서 구한다. date( 'Y-m-01' ) 말일은 날짜 자리에 t를 넣어서 구한다. date( 'Y-m-t' ) 다음은 당월 초일과 말일을 출력하는 간단한 예이다. <!doctype html> <html lang="ko"> <head> <meta charset="utf-8"> <title>HTML</title> <style> ...

PHP / 문법

PHP / 문법

HTML 문서에 PHP 코드 넣기 PHP 코드는 HTML 문서에 넣는다. 이를 실행하기 위해서는 어느 부분이 PHP 코드인지 알려줘야 한다. PHP 코드 부분을 명시하기 위한 방법은 여러 가지가 있는데, 보통 을 사용한다. 방법 1 <?php와 ?> 사이에 PHP 코드를 넣는다. <?php // PHP Code ?> 방법 2 script 태그 사이에 PHP 코드를 넣는다. <script language="php"> // ...

PHP / 반복문 / foreach

PHP / 반복문 / foreach

foreach는 배열의 각 값에 대하여 반복 작업을 합니다. 문법 foreach ( array_expression as $value ) { statement; } foreach ( array_expression as $value ) : statement; endforeach; 예제 배열 jba의 각 값을 변수 jbv에 넣습니다. 변수 jbv를 두 배하고 1을 뺀 값을 변수 jbr에 넣습니다. 변수 jbr을 출력합니다. <!doctype html> <html lang="ko"> <head> <meta charset="utf-8"> ...

PHP / addslashes(), stripslashes()

PHP / addslashes(), stripslashes()

addslashes() 작은 따옴표, 큰 따옴표, 백슬래시 앞에 백슬래시를 추가한다. 즉, PHP 'PHP' "PHP"를 PHP \'PHP\' \"PHP\"로 변경한다. <!doctype html> <html lang="ko"> <head> <meta charset="utf-8"> <title>PHP</title> <style> * { font-family: "Consolas", monospace; ...

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

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

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

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 / 다른 페이지로 리디렉션(Redirection)하는 방법

PHP / 다른 페이지로 리디렉션(Redirection)하는 방법

여러 가지 이유로 a.php로 접속했을 때 b.php로 자동 이동하게 만들어야 할 경우가 있습니다. 이를 보통 리디렉션(Redirection)이라고 하는데, PHP에서는 다음과 같은 코드로 리디렉션을 구현할 수 있습니다. 다음과 같은 코드가 있는 페이지에 접속하면 https://www.codingfactory.net로 이동합니다. header( 'Location: https://www.codingfactory.net' ); 일정 시간 지난 후에 이동시키고 싶다면 sleep() 함수를 이용하세요. 다음은 5초 후 이동시키는 코드입니다. sleep( 5 ); header( ...

PHP / 변수 / 유동 변수(변수 안에 변수) 만드는 방법

PHP / 변수 / 유동 변수(변수 안에 변수) 만드는 방법

변수를 일정 규칙에 따라 자동으로 만들어야 할 때가 있다. 이런 변수를 유동 변수라고 하는 거 같은데, 공식 용어인지는 잘 모르겠다. 유동 변수를 만들려고 하면 변수 이름을 만들 때 변수를 넣어야 한다. 예를 들어 변수 이름에 $var라는 이름을 넣고 싶다면 다음과 같이 한다. ${$var} 아래는 변수 이름에 일련 번호를 붙이는 예제이다. 배열의 값을 일련 ...