[PHP_Login] using Cookie & DB

http://silnex.kro.kr/PHP_Tutorial/cookie_login/login.php

 

==COOKIE LOGIN==

2016년 6월 24일까지 설명되지 않은 부분은 주석 혹은 추가 설명으로 옆에 작성해 놓음

cookie_login_흐름도
COOKIE를 이용한 Login 흐름도

Login 흐름도를 보면알 수 있다 시피 총 4개의 파일을 이용해 Login을 구현했다.
각 php 파일의 대한 설명은 login.php > login_check.php > main_page.php > logout.php 순서로 하겠다.


Login.php

이 파일에서 하는 일은 ID와 PW를 받아 form을 이용해 POST하는 역할이다.

<html>
<head>
	<title> Login Page </title>
</head>
<body>
	<h1> Login Page </h1>
	<form method="post" action="login_check.php">
		<table>
		<tr>
			<td>ID :</td>
			<td> <input type="text" name="inputID"/> </td>
			<td rowspan="2"> <input type="submit" value="LOGIN"/>
		</tr>
		<tr>
			<td>PW :</td>
			<td> <input type="password" name="inputPW"/> </td>
		</tr>
		</table>
	</form>
</body>
</html>

이에 대한 설명은 [PHP] $_POST에서 했으므로 넘어가겠다.

(<table> 태그에 대한 설명 추가 예정)


Conn.php

DB에 연결하기 위한 php파일

<?php
	$SQL_host="localhost";
	$SQL_id="php_user";
	$SQL_pw="xopres";

	$conn=new mysqli($SQL_host,$SQL_id,$SQL_pw,$SQL_id);
?>

분석

2~3번 줄 : SQL 주소, ID, PW를 변수로 저장한다. 직접 전달해도 상관없다.
6번째 줄 : mysqli()함수를 이용, SQL과 연결한다.


Login_check.php

이 파일에선 ID와 PW를 DB에서 가져와 등록된 user인지 확인 후 main_page로 이동시키는 역할을 한다.

<?php
	if(!isset($_POST['inputID']) || !isset($_POST['inputPW'])){
		echo "<meta http-equiv='refresh' content='0;url=login.php'/>";
		exit;
	}
	$user_id=$_POST['inputID'];
	$user_pw=$_POST['inputPW'];

	include_once("conn.php");
	$sql="SELECT * FROM `user_info` WHERE `user_id`='$user_id'";
	$result=mysqli_query($conn,$sql);
	$db=mysqli_fetch_assoc($result);

	if(!isset($db['user_id'])){
		echo "<script>alert('ID error');history.back();</script>";
		exit;
	}
	if($db['user_pw'] != $user_pw){
		echo "<script>alert('PW error');history.back();</script>";
		exit;
	}

	setcookie('user_id', $user_id, time() + 300, '/');
	echo "<script>alert('로그인 성공')</script>";
?>
<meta http-equiv='refresh' content='0;url=main_page.php'>

분석

2번째 줄 : 잘못된 접근으로 인해 inputID와 PW를 전송받지 못 할 때
      강제 종료 및 login.php로 리다이렉션(EX. URL로 바로 접근)
6~7번 줄 : POST된 값을 user_id와 user_pw에 각각 저장
9~12번 줄: conn.php를 통해 연결한 SQL에서 $user_id와 일치하는 row를 가져와 $db에 저장
14~21번 줄: DB의 내용과 비교 ID와 PW 비교 // “history.go()_참고
23번째 줄: 로그인 성공시 COOKIE생성
26번째 줄: main_page.php로 이동


Main_page.php

이 파일은 이후 게시판 및 각종 기능으로 이어지는 링크를 넣을 곳이다.
현재 로그아웃 링크와 쿠키에서 user의 ID를 불러와 “환영합니다 $user_id님!”을 띄우는게 고작이다. 

<meta charset="utf-8"/>
<?php
	if(!isset($_COOKIE['user_id'])){
		echo "<meta http-equiv='refresh' content='0;url=login_check.php'/>";
		exit;
	}
	$user_id = $_COOKIE['user_id'];
	echo "안녕하세요 ".$user_id."님! <br/>";
	echo "<a href='logout.php'>로그아웃</a>";
?>

분석

1번째 줄 : 한글을 표시하기위해 utf-8로 설정하기위한 html 태그이다.
3~6번 줄 : cookie가 생성 되었는지 확인후 없으면 login_check.php로 리다이렉션 시킴
7번째 줄 : 변수 $user_id에 쿠키에 들어있는 user_id값을 넣음
8~9번 줄 : user_id출력 및 logout링크 생성


Logout.php

여기선 cookie를 만료시킨뒤 main_page.php > login_check.php > login.php순으로 이동시켜
로그아웃 시키는 역할을 한다.

<?php
	setcookie('user_id', '', time()-300, '/');
?>
<meta http-equiv='refresh' content='0;url=main_page.php'/>

분석

2번째 줄 : cookie를 수정하여 만료 시킨다.
4번째 줄 : main_page.php로 리다이렉션 시킨다.

글의 문제가 있다면 댓글을 달아 주세요.

이 사이트는 스팸을 줄이는 아키스밋을 사용합니다. 댓글이 어떻게 처리되는지 알아보십시오.