우리는 이때까지 로그인을 어떻게 수행하는 지 확인해봤습니다.
하지만 로그인을 성공했지만, http 프로토콜에는 특별한 특징이 있어 로그인한 상태를 유지하지 못합니다.
바로 connectionless 와 stateless 특징 때문입니다.
connectionless는 클라이언트의 요청을 보내고 서버에서 응답을 보내면 연결이 끊어진다는 특징이고,
stateless는 연결이 끊어지면 모든 상태정보를 잃어버리는 특징입니다.
그렇기 때문에 매 요청마다 전에 로그인한 상태 정보를 서버는 잃어버리기 때문에 클라이언트가 누구인지 알 수 없고, 우리는 매 요청마다 로그인을 하여 내가 누구인지 알려 주어야할 것입니다.
하지만, 우리는 한번 로그인을 하면 우리가 로그아웃하기 전까지 로그인상태가 유지됩니다. 그 이유가 바로 쿠키라는 것을 사용하기 때문인데요.
쿠키는 전의 상태 정보를 클라이언트가 저장하고 있다가 우리가 요청을 보낼 때마다 같이 보내 클라이언트가 누구인지 알려주는 용도로 사용됩니다.
sessionId라는 이름을 가진 쿠키를 지정해주는 것을 확인할 수 있습니다.
이렇게 하면 로그인 성공 시 쿠키에 sessionId 에 로그인한 사용자(admin)의 idx가 저장되어 만약 다음에 요청시 이 쿠키를 같이 보내주면 로그인 없이 너를 admin으로 알겠다고 하는 것입니다.
하지만 여기서 문제가 있습니다. 바로 이 쿠키를 정보를 클라이언트에서 막 변경할 수 있다는 것인데요... 만약 나는 admin이지만 다른 사용자인 guest의 idx를 쿠키에 넣어서 요청하면 어떻게 될까요??
바로 서버는 아!!! 너가 guest구나 하면서 guest로 로그인을 시켜줍니다. 확인해볼까요??
hello guest가 뜨는 것이 보이시나요? 이렇게 클라이언트 측에서 쿠키를 변경해서 요청을 보낼 수 있기 때문에 문제가 됩니다.
그래서 어떻게 하면 좋을까? 하다가 나온것이 이 정보를 서버측에서 저장하고 있자!! 해서 나온것이 세션입니다.
세션을 실습을 통해 확인해보겠습니다.
세션은 session_start(); 함수를 통해 사용할 수 있습니다.
session을 시작하고 위와 같이 $_SESSION[세션 변수 이름] = 저장할 값 으로 세션을 저장할 수 있습니다.
세션이 서버 컴퓨터에 저장된다고 했는데 실제로 저장되는지 확인해봐야겠죠?
실제로 로그인하면 /var/lib/php/sessions 파일에 세션들이 저장됩니다.
파일을 읽어보면 idx와 name도 제대로 저장된 모습!!!
클라이언트의 쿠키에도 서버에 저장된 세션 이름과 같은 값을 가지는 아이디가 저장된 것을 확인할 수 있습니다.
세션값을 사용할 때도 세션 설정과 마찬가지로 $_SESSION[세션 변수 이름] 을 사용하여 변수와 같이 사용할 수 있습니다.
이제 클라이언트에서 이 세션값을 쿠키에 실어서 같이 요청을 보내면 서버에서 이 사용자가 누구인지 알 수 있습니다.
요즘에는 jwt를 사용한다고 하는 데 이것도 알아보면 좋을 것 같습니다.
이렇게 우리는 이번주차를 통해 로그인의 구현방법과 유지방법을 알아보았습니다. 이해가 되셨으면 좋겠네요...ㅠㅠ
마지막 과제와 함께 이번 주차는 마치겠습니다.
과제
1. 로그인 페이지 식별, 인증, 해시를 통해 만들기
- 이건 이미 앞에 설명하면서 만들어봐서 패스!!
2. jwt 공부하기와 가능하면 jwt로 로그인 페이지 만들기
+ 마이페이지 만들기?
'웹 개발' 카테고리의 다른 글
웹 개발 공부 일기장 3 - 과제 (jwt 로그인 페이지) (0) | 2023.11.13 |
---|---|
웹 개발 공부하기 3 - 과제 (jwt) (2) | 2023.11.11 |
웹 개발 일기장 3 - 2 (해시함수) (0) | 2023.11.10 |
웹 개발 일기장 3 - 1 (로그인 로직) (2) | 2023.11.09 |
웹 개발 공부 일기장 2 - 과제 (로그인 페이지 With DB) (0) | 2023.11.06 |