웹 개발

웹 개발 공부 일기장 2 - 과제 (로그인 페이지 With DB)

Go Slowly 2023. 11. 6. 15:58

이번엔 저번 시간에 못한 과제 3을 해보겠습니다.

 

3. 1주차에 만든 로그인 페이지를 DB와 연동하기

 

기본적인 login.php 의 html 코드는 변함이 없고 php 코드를 따로 login_func.php 파일에 저장하여 post 요청 시 require_once 함수로 불러왔습니다. 그럼 login_func.php 코드를 보겠습니다.

login_func.php

 

database.php와 session.php 를 가져왔습니다. database 파일을 전 시간에 설명하였지만 간단하게 다시 설명하면 localhost에 있는 데이터베이스에 연결하는 코드가 database에 있어 우리는 $db_conn 변수로 데이터베이스에 연결할 수 있습니다.

 

제가 로그인 페이지를 데이터베이스와 연결하여 구현한 방법은??

1. 아이디와 비밀번호를 입력받은 후 데이터베이스에 해당 아이디가 있는 지 확인하여 있을 경우 해당 행을 가져옴.

2. 가져온 행이 없을 경우 해당 정보가 우리 데이터베이스에 없다고 판단하여 로그인 실패.

3. 가져온 행이 있을 경우 행의 비밀번호와 입력받은 비밀번호가 같은지 판단.

4. 비밀번호가 서로 같을 경우 로그인 성공.

5. 비밀번호가 틀릴 경우 로그인 실패.

 

이렇게 구현하였고 위의 코드를 비교해서 보시면 금방이해하실 수 있을 것 같다고 생각합니다.

 

그럼 이제 중간에 이해하려고 보다보니 이상한 SESSION 단어가 나와있는 것을 확인할 수 있습니다.

https://get-better-little.tistory.com/5 여기에 제가 따로 쿠키와 세션을 설명한 블로그가 있습니다.

 

간단히 설명하면 HTTP 프로토콜의 Conectionless와 Stateless 특징 때문에 웹서버는 클라이언트를 기억할 수 없습니다. 그렇기에 HTTP에서 상태를 유지하기 위해 저번 연결에 대한 정보를 저장하는 무엇인가가 필요합니다. 클라이언트(웹브라우저)에서 저장하는 이것이 쿠키이며, 서버측에서 저장하는 것이 세션입니다.

 

서버는 session_start();로 세션을 시작하고 $_SESSION[세션이름] = [저장할 값] 으로 세션을 설정할 수 있습니다. 

그렇기 때문에 $_SESSION['idx'] = $user['idx']; 코드는 결과행의 idx 값을 세션이름이 idx인 세션에 저장합니다. 만약 이 값을 사용하고 싶으면 $_SESSION['idx']로 사용할 수 있습니다. 

 

아!!! session_start 함수는 session.php 파일에 따로 저장해놨습니다. 그래서 처음에 session.php를 가져왔었습니다.

 

이렇게 우리서버에 세션을 저장해놨습니다. 하지만, 클라이언트 측에서 세션값을 전달해주지 않으면 결국 서버는 누구의 요청인지 알 수 없습니다. 

그래서 쿠키!! 클라이언트의 쿠키에 세션값을 넣어주어 우리에게 요청을 한다면 해당 클라이언트가 누구인지 서버는 바로 알 수가 있습니다.

 

그럼 이제 쿠키를 설정하는 방법을 알아야겠죠??? 이때 사용하는 것이 setcookie함수 입니다. 처음에 적어주는 매개변수가 쿠키이름이고, 두번째 적어준 것이 해당 쿠키의 값이 됩니다. 

위의 코드를 보면 setcookie('sessionId', $_SESSION['idx']); 가 어떻게 된 것인지 알 수 있을 겁니다.

- 즉, 클라이언트 쿠키에 sessionId에 우리가 저장해놓은 session['idx'] 가 저장된 채 클라이언트에 보내주는 겁니다. 다음에 해당 쿠키를 넣어서 서버에 요청을 보내면 우리는 바로 해당 클라이언트가 누구인지 알 수 있습니다.

 

이렇게 하면 한번 로그인하면 브라우저 종료까지 유지되기 때문에 한번 로그인하고 계속 유지할 수 있습니다.

확인을 해봐야 겠죠??

오른쪽 개발자 도구를 확인하면 쿠키에 세션정보가 없는 것을 확인 가능

 

쿠키에 세션정보가 없기 때문에 index.php 에서 please login 을 출력합니다. 

그럼 이제 로그인을 해보겠습니다.

 

로그인 하기

 

로그인 후 쿠키에 세션 정보가 들어간 것 확인

 

로그인 후 확인해보면 index.php는 hello [로그인한 이름] 출력하며 쿠키에도 세션 정보가 추가된 것을 확인할 수 있습니다.

admin의 idx가 1이기 때문에 sessionId의 값이 1인 것 또한 확인 가능합니다.

이렇게 되면 로그인한 사람이 누구인지 알 수 있으며 다음 요청 시 쿠키를 확인하여 로그인한 사람에 대한 정보를 유지 할 수 있습니다.

 

쿠키의 또 다른 기능 

session 값을 9로 guest의 idx로 바꿀 경우

 

쿠키의 값을 우리가 바꿀 수 있는 데 우리는 idx로 로그인한 사람을 구별합니다. 만약 idx를 다른 사용자인 guest의 idx로 바꾸면 어떻게 될까요??

guest로 로그인 되는 것을 확인

 

우리는 쿠키 정보로 사용자를 판단하기 때문에 guest로 로그인 되는 것을 확인할 수 있습니다. 

- 이렇게 하면 좀 더 쿠키와 세션에 대해 이해하기 쉬울 것 같았습니다.

 

누가봐도 위험해 보입니다. 그렇기 때문에 실제로는 무작위 문자열을 사용하여 추측할 수 없게 해놓았습니다.

 

index.php

index.php 코드가 궁금하실 수도 있을 것 같아 올립니다.

 

이렇게 2주차 과제까지 마무리 해봤습니다.  다음 주차에는 무엇을 할지 벌써 기대가 되네요 다음 주에 뵙겠습니다.