[PHP 7] 게시판 로그인 기능 구현하기 (🍪 쿠키와 세션)

김와앙·2023년 10월 17일

PHP 7

목록 보기
11/20

url을 사용하여 회원의 아이디나 pw를 다루는 건 보안상으로도 좋지 않다.
➡️그래서 사용하는 것이 cookie 와 session
➡️url 말고 계속적으로 사용할 수 있는 개념.

이렇게 보이면 다 노출되잖아 ,, ........ ?ㅎ

비동기 연결 방식으로, 파일에서 파일로 데이터를 보낼 때
url을 통한 전달은 다 노출이 되는 방식으로 로그인 페이지에 적합하지 않음.

(ex) a.php 와 b.php 가 있을 경우, 변수 a.php 파일의 $a = 100;,
b.php 파일에 echo $a; 를 했다면 당연하게도 b.php 에는 출력이 100으로 나오지 않는다.

GET 방식이나 POST 방식으로 따로 연결을 해줘야만 두 파일이 공용으로 a 를 사용하게 되는 것이다.

하지만,

🍪
cookie 나 세션의 경우는 한 파일에서 데이터나 변수를 cookie 로 set 해놓으면 새 파일을 생성해도 별개의 연결 (GET, POST..) 없이 공용으로 계속 사용할 수 있게 된다. (노출 필요 없이)

결국 목적은 데이터를 공통적으로 사용하는 것이다.

Cookie vs Session 차이?

쿠키는 사용자의 브라우저에 저장되는 것.
세션은 DB(서버) 에 저장되는 것.

: 로그인 구현에는 주로 세션을 사용한다.

F12 를 누르면 쿠키를 확인할 수 있다.
쿠키의 경우 대부분의 내용이 다 저장되기 때문에 보안의 면에서
보통 기본적인 내용을 저장할 때만 쿠키를 사용한다.

쿠키는 주로 방문자수, 조회수 증가에 사용하기도 한다.
새로고침 할 때마다 조회수가 늘면 안되니까 그런 것을 제어하고 관리하는 용도로 사용한다고 한다.

php 에서 쿠키 사용하기

https://www.php.net/
php 공식문서에서 cookie 검색

setcookie() 라는 함수가 나오는데, 주요 이름 빼고 나머지는 생략해도 상관없는 것들이다.

vscode에서 치기만 해도 나오긴 한다. ㅋ
setcookie('변수이름', '넣을 값');
이렇게 넣어주면 값 설정 완료다.

쿠키가 잘 들어갔는지 확인하기
:쿠키야,,, 잘들어갔지? (아련)

역시나 phpinfo() 를 사용한다.

잘들어갔네.
setcookie('soo','안녕하세요?'); 의 결과

<?php

    setcookie("soo","안녕하세요?");

    echo $_COOKIE['soo'];

info 에 있는 변수명 그대로 출력 해주면 출력된다.

2.php 라는 새 파일을 만들어서 따로 쿠키셋 없이 걍 사용해줘도
출력이된다.

이것이 🍪 파워

결론적으로 쿠키란, url을 사용하지 않아도 공용적으로 사용할 수 있는 데이터를 말하는 거다.

#쿠키의 장점 : 개발자가 자기만 아는 어떤 걸 변수에 넣어둘 수 있다.

이걸 이용해서 로그인 페이지 만들어보기

▪︎login.php


 <form action="loginProc.php" method="post" >
  
    <input type="text" name="uid" placeholder="아이디"> <br>
    <input type="password" name="pwd" placeholder="비밀번호">
    <button type="submit">로그인</button>
    
 </form>
 

html 틈새 공부 )

📍placeholder 은 사용자가 입력할 때 도움을 주는 짧은 도움말 같은 것.

like this.

▪︎loginProc.php

<?php

    $id = $_POST['uid'];
    $pwd = $_POST['pwd'];


    if($id=="admin"&& $pwd=="1234"){

        setcookie("Isme", "OK");

    }
    else{

        echo "아이디 혹은 비밀번호가 잘못 입력되었습니다.";
        exit;
    }

    ?>


<script>

    location.href = "memberList.php"

</script>

📍POST[] : 대괄호임
📍method = "POST" : 대문자로 써줘야 됨 안그러면 오류남
📍name 그거 POST 쓸 때 '$uid'아니고 그냥 'uid' 임.

추가로
아이디와 비밀번호가 일치하면
setcookie 로 변수와 값을 set 해주고
이 설정된 변수를 활용하여 멤버리스트를 볼 수 있는 자와 없는 자를 구별하기

(Isme라는 변수와 값이 일치하면 접근이 가능, 아니면 접근불가능 이런식으로 구현)

▪︎memberList.php

<?php

    $user = $_COOKIE['Isme'];

    if($user!= 'OK'){

        echo "관리자만 접근이 가능합니다.";
        exit;
    }

?>

사용자 리스트  <br>

1. 도라에몽 <br>
2. 뽀로로 <br>
3. 짱구 <br>
4. 자두 <br>
5. 둘리 <br>
6. 크롱 <br>
7. 루피 <br>

<a href="logOut.php">로그아웃</a>
  • 로그인을 해서 Isme가 있으면 리스트가 보이게 된다.
  • 다를 경우는 뭐냐? (로그아웃 된 채로 접근할 때 나타남)

▪︎logOut.php

<?php

    setcookie("Isme", " ");

    ?>

<script>
    location.href = "login.php";
</script>
  • 로그아웃 버튼을 누르면 setcookie로 Isme 의 값을 변경시켜주고
    다시 돌아가도록한다
  • 이렇게 하면 로그아웃 한채로 /memberList 접근을 할 때
    "관리자만 접근 가능합니다." 가 나온다.

쿠키의 한계, 단점

  • F12를 나오면 보이는 쿠키의 정보가 있는데
    내가 만든 쿠키의 이름과 값을 확인할 수 있다.

마음대로 수정도 가능하고, 보안이 최악이다.
(확인이 쉽다.)

  • 대책으로 암호화를 해서 복잡한 과정을 거쳐서 사용하기도 하지만,
    이러한 불편함과 떨어지는 보안성 때문에 로그인 구현은 대부분 '세션'으로 이루어지게 된다.

session (세션 사용하기)

우선 , session 은 자동 설정이 되어있지 않아서,
사용할 때 따로 시작을 해줘야 한다.

phpinfo();

를 입력하고 session 부분을 확인해보면

session_auto_start 가 off 로 되어있는걸 볼 수있다.
자동으로 시작이 되지 않아서 우리가 시작을 해줘야 사용할 수있다는 소리다.

사용하는 법은 아주 간단하다.

session_start();

이 함수를 넣어주면 세션을 사용할 수 있게된다.

start 를 해주면 session 정상 작동.

사용하는 다른 파일에서도 start 를 동일하게 해줘야한다.

다른 파일인데도 별다른 연결없이 출력이 되는 걸 볼 수 있다.

✏️쿠키랑 큰 차이점은 ?
쿠키보다 사용자 브라우저에 저장되는 게 적다.
assa 라는 저 변수도 F12 를 눌러 쿠키를 확인해보면 확인할 수 없다.
기본적인 것 외에는 브라우저에서 확인할 수 없다.
반면에 쿠키는 거의 모든 정보가 개인 브라우저에서 확인된다.

👩🏼‍💻 정상적인 세션일 때만 <멤버리스트> 를 확인할 수 있는 페이지 만들어보기

profile
greedy college ssu.tudent 👩‍🎓

0개의 댓글