프로그래밍 언어/PHP

PHP: 회원가입과 로그인

회원가입

먼저 회원가입을 알아보자. 아주 간단하게만 이야기 할 것이며, 여기서는 데이터베이스 대신 배열을 사용하여 처리해보도록 하겠다. 데이터베이스를 사용하는 법이 궁금하다면, 아래의 글을 참고해보자.

 

PHP: 데이터베이스 (MySQLi, PDO)

 

PHP: 데이터베이스 (MySQLi, PDO)

데이터베이스 데이터베이스를 사용하는 일은 웹 어플리케이션을 작성한다면 대부분 있는 일이기에 이 부분을 빼놓을 수는 없다. PHP도 물론 오라클이나 MS-SQL 같은 다양한 데이터베이스에 연결��

pronist.tistory.com

여기서 사용하는 폼은 회원가입과 로그인에서 둘 다 사용할 것이며, 차이점은 폼에서 요청하는 주소인 action 속성의 값 밖에 없을 것이다. 여기서 중요한 것은 각 input 태그가 가진 name 속성의 값과 form 태그의 method 의 값이다. 폼은 기본적으로 GET, POST 두 개밖에 지원하지 않는다. 여기서는 POST 요청을 쓴다.

<form action='/register.php' method='POST'>
    <input type='text' name='email'>
    <input type='password' name='password'>
    <input type='submit'>
</form>

폼에 대한 조금 더 자세한 이야기를 보고싶다면, 아래의 글을 참고하자.

 

PHP: HTML 폼 (GET, POST)

 

PHP: HTML 폼 (GET, POST)

HTML 폼 HTML 폼은 HTTP 요청의 역사에서 오래된 것 중 하나이다. HTTP 요청은 cURL, Ajax 등 다양한 기술로 처리를 할 수 있으나 폼요청은 웹사이트에서 가장 많이 사용하는 요청이자 역사가 오래된 ��

pronist.tistory.com

register.php

단순하다. 그저 저장소에 생성해서 저장소에 넣어주기만 하면 된다. 그러니 일단 간단한 저장소를 하나 만들자. 처음에 언급한대로 데이터베이스가 아닌 배열로 하도록 하겠다. 글로벌하게 저장될 수 있도록 세션에다가 넣어두자.

session_start();

if (empty($_SESSION['__storage'])) {
    $_SESSION['__storage'] = [];
}

세션이 무엇인지 모르겠다면, 아래의 글을 참고하자. 참고로 세션은 로그인에서 아주 중요한 기능이니 모른다면 반드시 숙지해야 한다.

 

PHP: 쿠키와 세션

 

PHP: 쿠키와 세션

쿠키 쿠키는 브라우저에 저장되는 정보로 Key-Value 쌍으로 구성되어 있고, 유효기간을 가지고 있다. 브라우저에 저장할 수 있는 스토리지는 쿠키 말고도 로컬 스토리지와 세션 스토리지가 있는��

pronist.tistory.com

데이터를 넣기 전에 반드시 검증해야 한다. 예를 들면 email 이 정말로 이메일 형식인지 검사하는 것이다. 이는 PHP: HTML 폼 (GET, POST)에서 언급한대로 filter_input() 과 관련된 함수를 쓰자.

[ $email, $password ] = array_values(filter_input_array(INPUT_POST, [
    'email' => FILTER_VALIDATE_EMAIL,
    'password' => FILTER_DEFAULT
]));

검증이 완료되었다면, 이제 스토리지에 잘 넣어두자. 여기서 password_hash() 함수는 아주 중요하기 때문에 반드시 기억해두어야 한다. 해당 함수는 비밀번호를 암호화하는데 쓰인다. 비밀번호를 데이터베이스나 저장소에 저장할 때 아무런 변화도 주지않고 평문상태로 넣는다면 최악인 것이다.

if ($email && $password) {
    $user = [
        'email' => $email,
        'password' => password_hash($password, PASSWORD_DEFAULT)
    ];
    $_SESSION['__storage'][$user['email']] = $user;
}

 

https://www.php.net/manual/en/book.password.php

 

PHP: Password Hashing - Manual

There are no user contributed notes for this page.

www.php.net

로그인

로그인에서 가장 중요한 것은 아이디를 찾고, 패스워드를 검증하고 세션을 사용하여 로그인하는 것이다. 폼은 회원가입과 같은 것을 쓰겠으나, action 부분이 /login.php 로 변경된 것 이외엔 변경점이 없다. 데이터를 얻어오고 검증하는 부분도 똑같다.

login.php

스토리지에서 아이디를 찾고, 패스를 검증한다. 무엇으로? password_verify() 함수로 말이다. 이는 password_hash()해시화한 문자열을 원본과 비교하여 검증할 수 있다.

session_start();

// Form Data ... ($_POST)

if ($email && $password) {
    if (array_key_exists($email, $_SESSION['__storage'])) {
    	$user = $_SESSION['__storage'][$email]
        
        if (($email === $user['email']) && password_verify($password, $user['password'])) {
            $_SESSION['UID'] = $user['email'];
        }
    }
}

$_SESSION['UID'] = $user['email'] 부분이 로그인을 진행하는 부분이며, 다른 스크립트에서 $_SESSION['UID'] 를 통해 로그인한 유저의 이메일에 접근할 수 있다. 물론 이메일 이외에 다른 것을 넣어도 상관없지만, 그냥 식별자만을 넣어두는게 보안상에도 좋을 것이다.

 

 

 

PHP 7+ 프로그래밍: 리부트 - 인프런

기초 문법부터 내장 함수, 웹 보안, 게시판 만들기까지 PHP 언어를 시작하는 분들을 위해 바이블이 될 수 있게 만들어보고자 하는 마음으로 이번 강좌를 만들어보았습니다. 입문 웹 개발 프로그��

www.inflearn.com

 

PHP 7+ 프로그래밍: 객체지향 - 인프런

PHP 객체지향, 내장 클래스, PSR, Composer, MVC(Model, View, Controller)까지 모던 PHP를 익히기 위한 근간을 이야기합니다. 초급 프로그래밍 언어 알고리즘 PHP 객체지향 알고리즘 온라인 강의 모던 PHP 프로��

www.inflearn.com

'프로그래밍 언어 > PHP' 카테고리의 다른 글

PHP: PHP 8 기능 정리 및 요약  (1) 2020.09.23
PHP: 게시판  (0) 2020.09.11
PHP: 회원가입과 로그인  (0) 2020.09.02
PHP: PSR(PHP Standard Recommendation)  (0) 2020.08.15
PHP: 의존성 관리자 — Composer  (0) 2020.08.14
PHP: MVC(Model, View, Controller)  (0) 2020.06.29