[4] PHP - 로그인

2024. 4. 9. 13:09PHP

728x90

[ 환경 ]
ㄴ php 7
ㄴ MySQL 5.7

※ 로그인시 보안또는 부수적인 기능과 퍼블리싱은 따로 하지 않았으며 가장 기본시되는 기능들만 넣은 상태

 

※ 로그인 요청, 로그인 실행 2개의 페이지 필요

※ 로그인의 확실한 성공여부 체크를 위한 실행 후의 체크페이지도 추가

※ 로그인을 하기 위한 데이터베이스 필요

※ php 세션 활용

ㄴ 세션 참고 https://kuk1938.tistory.com/36

 

[3] PHP - 세션(SESSION)

세션이란? ㄴ 웹서버에 저장이 되며, 사용자가 웹사이트에 방문시 사용자와 서버사이의 연결을 확인하기 위한 정보. ㄴ 사용예시) 로그인, 인증 등 ★ 세션을 활용하여 로그인 기능 추후 포스팅

kuk1938.tistory.com

 


 

1. 로그인 요청 페이지 (html페이지)

※ form 전송 방법을 사용하여 진행할 예정.

 스크립트나 제이쿼리에서 ajax 사용하여 데이터 전송 방법도 있음.

 

로그인
아이디 비밀번호
<!DOCTYPE html>
<html>
<head>
	<title>로그인</title>
</head>
<body>
	<form method="POST" action="login.php">
		<div>
			아이디<input type="text" name="id">
			비밀번호<input type="text" name="password">
			<button type="submit">로그인</button>
		</div>
	</form>
</body>
</html>

ㄴ form 전송 방법 (form태그에 action옵션 활용)

ㄴ form에서 아이디/비밀번호를 입력 후 로그인 버튼을 클릭하여 submit될때 action의 경로 페이지를 실행.

 

2. 로그인을 위한 회원목록 테이블 구성

고유키(고유번호), 아이디, 비밀번호는 필수로 들어가야한다.

※ 이름, 이메일, 전화번호 등 추가적인 정보들은 필요에따라 추가해주면 된다.

ㄴ 고유번호, 아이디, 비밀번호, 이름, 이메일로만 구성하였음.

ㄴ 추가로 사용여부, 등록아이피라는 컬럼도 넣어두었으나, 추후에 활용하겠음.

ㄴ 회원가입 기능은 현재 따로 없고 예전에 데이터를 임의로 넣어두었기 때문에 그대로 사용하겠음.

ㄴ test라는 아이디로 로그인을 진행하겠음.

pw 컬럼의 값은 MySQL에서 password()함수를 사용하여 자동 암호화된 데이터이다.

 

 

3. 로그인 실행 페이지 (php페이지)

로그인 요청페이지에서 action옵션에 입력된 경로페이지로 이동

 

<?php 
	
	// db연결구문
	$host = "11.111.111.1"; // 아이피
	$user = "root"; // 사용자명
	$password = "???????"; // 비밀번호
	$dbname = "???????"; // 데이터베이스명
	$conn = new mysqli($host, $user, $password, $dbname); // 객체지향
	$mysql_check = $conn->connect_error; // mysql에러확인

	if($mysql_check){ // db연결여부 확인 코드.
		die("연결실패 :".$mysql_check); // 연결 실패 원인 함께 출력
	}else{
		echo "DB서버 연결성공<br>";
	}

// $_POST[] : form method [post]로 전송했을때 php에서 $_POST[]값을 확인할수 있다.
// print_r()로 $_POST를 출력시 입력한 전체 POST값을 확인할 수 있다.
	$id = $_POST['id']; // 입력한 아이디값 변수
	$pw = $_POST['password']; // 입력한 비밀번호값 변수
    
	// 아이디 비밀번호를 체크하여 회원목록 테이블에서 체크
	// r_pw는 입력한 비밀번호를 암호화하여 서브쿼리로 체크
	$sql = "
		SELECT 
			idx,
			id,
			pw,
			( SELECT PASSWORD('{$pw}') ) AS r_pw 
		FROM member 
		WHERE id = '{$id}' 
	";

	$result = $conn->query($sql); // 객체지향 - 쿼리 실행 함수
	$select = $result->fetch_assoc(); // 객체지향 - 데이터를 문자형 연관배열로 변환

	// 필요한 컬럼을 $select배열에서 추출하여 체크
	if($select['id'] != $id){ // 아이디 체크
		die("아이디가 일치하지 않습니다.");
	}else if($select['pw'] != $select['r_pw']){ // 비밀번호 체크
		die("비밀번호가 일치하지 않습니다.");			
	}else{ // 아이디, 비밀번호가 일치할 경우
		session_start(); // 세션시작
		$_SESSION['serial_idx'] = $select['idx']; // 회원고유번호 세션등록
		$_SESSION['serial_id'] = $select['id']; // 회원아이디 세션등록
		echo "<script>alert('로그인에 성공하였습니다.');</script>"; // 로그인 성공 출력
		header("location:main.php"); // 로그인 성공 후 해당페이지 이동
	}
    
?>

ㄴ 데이터베이스 서버 연결 진행

ㄴ form에서 POST로 넘긴 값을 체크

ㄴ 아이디와 비밀번호를 따로 변수선언

ㄴ 회원목록 테이블에서 데이터를 추출 후 로그인 성공여부 체크

ㄴ 로그인 성공 후 세션등록 후 로그인 성공 페이지로 이동

 

모든 조건을 통과하고, 최종적으로 로그인이 성공하면 페이지이동을 시킨다.

 

4. 로그인 성공 후 페이지 이동 (php, html혼용 페이지)

보통은 웹사이트 메인으로 이동한다.

지금은 로그인 전후의 확실한 비교를 위해 main이라는 페이지로 이동하고, 로그인이 실패하였을땐 페이지 자체의 접근을 막아뒀다. 로그인 성공시에만 해당 페이지로 접근하도록 되어있다.

 

<?php 
	session_start(); // 세션시작
	$login = $_SESSION['serial_idx']; // 로그인페이지에서 저장한 회원고유번호
	if(!$login){ // 고유번호 값이 없을 경우 접근을 막고 로그인요청 페이지로 이동
	 	echo "<script>alert('로그인을 하지 않았습니다.');</script>";
	 	echo "<script>window.location.href='index.php';</script>";
	}
?>


<!DOCTYPE html>
<html>
<head>
	<title>메인 페이지</title>
</head>
<body>
		<div>로그인을 성공하였습니다.</div>
</body>
</html>

ㄴ 로그인 실행페이지에서 저장한 회원고유번호 값을 기준으로 페이지의 접근을 컨트롤 한다.

 

 

1. 로그인 요청 - (로그인 요청페이지)

 

2. 아이디 틀렸을 경우 - (로그인 실행페이지)

 

3. 비밀번호 틀렸을 경우 - (로그인 실행페이지)

 

4. 로그인 성공 하였을 경우 - (로그인 성공 후 확인페이지)

728x90

'PHP' 카테고리의 다른 글

[6] PHP - 파일 불러오기(include,require)  (0) 2024.04.14
[5] PHP - 로그아웃  (0) 2024.04.12
[3] PHP - 세션(SESSION)  (0) 2024.04.08
[2] PHP - MySQL DB서버 연결  (0) 2024.04.07
[1] PHP - 기본문법_1  (0) 2024.04.06