2024. 4. 9. 13:09ㆍPHP
[ 환경 ]
ㄴ php 7
ㄴ MySQL 5.7
※ 로그인시 보안또는 부수적인 기능과 퍼블리싱은 따로 하지 않았으며 가장 기본시되는 기능들만 넣은 상태
※ 로그인 요청, 로그인 실행 2개의 페이지 필요
※ 로그인의 확실한 성공여부 체크를 위한 실행 후의 체크페이지도 추가
※ 로그인을 하기 위한 데이터베이스 필요
※ php 세션 활용
ㄴ 세션 참고 https://kuk1938.tistory.com/36
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. 로그인 성공 하였을 경우 - (로그인 성공 후 확인페이지)
'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 |