그러니깐.. 로그인되어야만 들어갈 수 있는 화면이랑
현재 누구로 로그인 되어있는지 알려주기.
결국은 간단하네요!
session 선에서 해결이 가능하답니다.
간단하게 session 함수에 대해 알아보겠습니다.
session_start() :
php 세션을 시작하는 함수 입니다!
이 함수를 호출하면 세션 ID가 생성되고, 서버 측에서 해당 세션 ID와 관련된 데이터가 저장됩니다.
간단히 말해 세션 함수 이용하고 싶으면 먼저 이 함수를 작성하시면 됩니다.
<?php
session_start();
>
$_SESSION :
서버 측에 저장된 세션 데이터를 사용하기 위해 사용됩니다.
이 변수를 사용하면 세션 데이터를 저장하고, 읽고, 수정이 가능합니다.
<?php
session_start();
$_SESSION['username'] = 'join'; //세션에 username부분에 join을 저장하겠습니다.
echo '세션 데이터가 저장되었습니다.';
>
session_unset() :
현재 세션에 저장된 모든 변수들을 제거합니다.
<?php
session_start();
unset($_SESSION['username']);
>
session_destroy() :
현재 세션을 종료하고, 모든 세션 데이터를 제거합니다.
로그아웃 때 쓰이면 되겠네요!
<?php
session_start();
session_destroy();
>
session_id() :
현재 세션의 ID값을 반환합니다!
<?php
session_start();
echo '현재 세션의 ID 값은 ', session_id(), '입니다.';
>
session_regenerate_id() :
현재 세션의 ID 값을 새로 생성합니다
<?php
session_start();
session_regenerate_id();
>
.
.
.
.
.
전에 만들 login_process 코딩으로 들어가봅시다.
그리고 로그인 성공 했을 때 session 함수를 시작하고
myqli_fetch_array 통해 로그인 한 정보를 가져옵니다
세션에 login_id 변수에 이 로그인한 아이디를 넣읍시다!
그리고 이제 로그인 한 사람만 갈 수 있는 페이지를 만듭시다.
새로운 페이지를 만들겠습니다!
/var/www/html 디렉터리에
#sudo touch only_login.php
그리고 only_login.php 에다가 세션에 로그인 관련 id가 있어야지만
들어올 수 있게 설정하겠습니다!
if else문 활용합시다.
isset() 함수는 변수에 할당이 되어있는지 안 되어 있는지 확인해 줍니다
즉 변수에 NULL이 되어있으면 FALSE를 아니면 TRUE를 반환합니다.
그러니 저기에! 붙여서 NULL일때 login.php 페이지로 보내게 했습니다.
header 함수는 예시로 저렇게 쓰이고요
페이지 위치를 바꿀 때 쓰입니다
그리고 exit 함수로 이 페이지를 바로 닫게 했습니다.
마지막으로 로그인 한 사람의 id를 출력까지 하겠습니다.
$_SESSION['login_id']이용해 echo로 출력하겠습니다.
저희가 로그인했을 때 이 페이지로 이동하게 만들겠습니다!
만약 로그인 실패하면 다시 돌아가게 설정하겠습니다.
process_login.php 에 if문에 추가하겠습니다!
이제 실패하면 login 페이지로 돌아가면서 실패 메시지까지 보내겠습니다!
이때 SESSION에 변수에 에러 메시지 담고 보내겠습니다.
그리고 마지막에 페이지를 닫게 했습니다. 과정인데 있을 필요가 없죠!
그리고 로그인 페이지에 이 오류 페이지 나오게 코딩하겠습니다
if 문과 isset으로 에러 메시지가 있으면 나오게 코딩!
됐습니다! 이제 다시 홈페이지 들어가서 로그인을 해보죠!
localhost/login.php
이번엔 일부로 틀리게 적어보겠습니다.
다행히 잘 되네요!
근데 여기서 단점은 로그아웃이 없어서 한번 로그인하면 계속 로그인된 상태가 유지가 됩니다.
그래서 다음 포스팅에 로그아웃 기능을 넣도록 하겠습니다.
감사합니다
-only_login.php
<?php
session_start(); //세션 시작
if(!isset($_SESSION['login_id'])) {
//로그인하지 않은 사용자
header("Location: login.php"); //login 화면으로 바꾼다
exit(); //이 페이지를 바로 닫는다
}
echo "당신은 ", $_SESSION['login_id'], " 입니다! 환영합니다! HAPPYHACKING!!";
?>
-process_login.php
<?php
$host = "localhost";
$username = "user2";
$password = "password";
$dbname = "LOGIN_INFO";
session_start(); //세션 시작
//데이터베이스 연결
$conn = mysqli_connect($host,$username,$password,$dbname);
//오류시 종료
if(mysqli_connect_errno()) {
die("데이터 베이스 오류: ". mysqli_connect_error());
}
//POST로 전달된 정보 받기
$login_id = $_POST['id'];
$login_pw = $_POST['pw'];
//쿼리문 작성
$sql = "SELECT * FROM LOGIN_INFO WHERE id='$login_id' AND pw = '$login_pw'";
//쿼리 실행
$result = mysqli_query($conn, $sql);
//쿼리 실행 결과 확인
if(mysqli_num_rows($result) > 0 ) {
//로그인 성공
$row = mysqli_fetch_array($result);
$_SESSION['login_id'] = $row['id'];
header("Location: only_login.php");
}
else {
//로그인 실패
$_SESSION['login_error'] = '아이디 또는 비밀번호가 일치 하지 않습니다.';
header("Location: login.php");
}
?>
-login.php
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>HAPPY HACKING!</title>
</head>
<body>
<h1>Login</h1>
<form action="process_login.php" method="POST">
<p><input type="text" name="id" placeholder="ID입력"></p>
<p><input type="text" name="pw" placeholder="PW입력"></p>
<p><input type="submit" placeholder="로그인하기"></p>
</form>
<p>
<?php session_start();
if (isset($_SESSION['login_error'])) {
echo $_SESSION['login_error'];
unset($_SESSION['login_error']);
}
?>
</p>
</body>
</html>
보안 관련해서 코드 몇개 수정했습니다!
https://mynameisarke.tistory.com/8
[노말틱 모의 해킹 취업반 개발과제 (1)] 보안 관련해서 보완 하기
안녕하세요 제가 개발과제 2주 차 2번까지 즉 로그인 페이지까지 만들었습니다. 그런데 코딩 하면서 보안상 문제가 있더라고요! 그래서 그 보안을 지키기 위해 점차 고쳐 나가겠습니다. 아마 지
mynameisarke.tistory.com
'개발과제' 카테고리의 다른 글
[노말틱 모의 해킹 취업반 3주차 개발과제 (1/2)] 회원가입 만들기 (0) | 2023.04.09 |
---|---|
[노말틱 모의 해킹 취업반 2주차 개발과제 (3)] 로그아웃 만들기 (0) | 2023.04.06 |
[노말틱 모의 해킹 취업반 2주차 개발과제 (1)] 로그인 기능 하는 페이지 만들기 (0) | 2023.04.04 |
[노말틱 모의 해킹 취업반 1주차 개발과제 (4)] DB에 데이터를 넣고, 화면에 출력해보기 (4) | 2023.04.03 |
[노말틱 모의 해킹 취업반 1주차 개발과제 (3)] GET/POST 데이터 전달하기 (0) | 2023.04.02 |