본문 바로가기

개발과제

[노말틱 모의 해킹 취업반 2주차 개발과제 (2)] 메인 페이지 만들어두기

그러니깐.. 로그인되어야만 들어갈 수 있는 화면이랑

현재 누구로 로그인 되어있는지 알려주기.

 

결국은 간단하네요!

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문 활용합시다.

 

 

밖에 비가 많이 오네요 HAPPYHACKING!

 

 

isset() 함수는 변수에 할당이 되어있는지 안 되어 있는지 확인해 줍니다

즉 변수에 NULL이 되어있으면 FALSE를 아니면 TRUE를 반환합니다.

 

그러니 저기에! 붙여서 NULL일때 login.php 페이지로 보내게 했습니다.

 

header 함수는 예시로 저렇게 쓰이고요

페이지 위치를 바꿀 때 쓰입니다

 

그리고 exit 함수로 이 페이지를 바로 닫게 했습니다.

 

마지막으로 로그인 한 사람의 id를 출력까지 하겠습니다.

 

$_SESSION['login_id']이용해 echo로 출력하겠습니다.

 

 

HAPPYHAPPY

 

 

 

저희가 로그인했을 때 이 페이지로 이동하게 만들겠습니다!

만약 로그인 실패하면 다시 돌아가게 설정하겠습니다.

 

process_login.php 에 if문에 추가하겠습니다!

 

 

session_start는 맨 위에 올렸습니다

 

이제 실패하면 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