session 이란 ?
web을 운영할때, 다수의 클라이언트의 로그인을 관리를 하는것에 대해 난관에 부딪혔다.
크게 3가지의 관리방법이 있는것으로 보인다.
- cookie
- session
- JWT
여기서는 session에대해 알아보기로 하자.
Session이란 ?
세션(session)은 컴퓨터 과학에서, 특히 네트워크 분야에서 반영구적이고 상호작용적인 정보 교환을 전제하는 둘 이상의 통신 장치나 컴퓨터와 사용자 간의 대화나 송수신 연결상태를 의미하는 보안적인 다이얼로그(dialogue) 및 시간대를 가리킨다. 따라서 세션은 연결상태를 유지하는 것보다 연결상태의 안정성을 더 중요시 하게 된다. - 위키백과
쉽게말해 , 일정 시간동안 클라이언트의 요청을 하나의 상태로보고 그상태를 유지하는 방법이다.
구체적으로는, 클라이언트가 브라우저에 접속하여 서버와 접속이 종료하기 전의 상태를 의미한다.
Session의 연결과정
- 클라이언트가 로그인을 시도한다.
- 서버는 로그인을 검사한다.
- 로그인 성공시, session ID를 생성한다.
이 session의 Key값은 UUID(중복되지않는 랜덤값)으로 설정한다.
Value값에 클라이언트의 정보를 넣는다.
생성한 session을 서버측 세션 저장소에 보관한다. - session의 Key값을 쿠키를 통해 사용자에게 전달한다.
- 사용자는 로그인 성공 이후 다른 요청을 할때마다 이 쿠키를 서버에 같이 전달한다.
- 서버측에서 클라이언트로부터 UUID값을 받으면, UUID를 Key값으로 갖는 세션을 검색 후,
존재한다면 그 session의 Value값의 클라이언트의 정보를 통해 인증을 진행한다. - 클라이언트가 일정 시간 웹서버를 이용하지 않으면 session은 자동으로 소멸된다.
Session 의 장점
session방식으로 인증상태를 관리하면 클라이언트의 중요정보들은 서버가 가지게 된다.
정보를 서버에 저장하기때문에 관리가 편하고 효율적이고, Cookie에 비해 안전할 수 있다.
새로고침, 브라우저 종료 , session유지 시간설정 등 세션 만료 기간 설정이 가능합니다.
Session의 단점
Cookie에 비해 조금 느리다. UUID값을 주고받은 후 인증을 거쳐 서버의 데이터를 참조해야하기 때문이다.
한계가 존재하는 서버자원을 사용하므로, 서버에 부하를 줄 수 있다.
Cookie에 비해 안전하지만, 취약점은 분명 존재한다.
대표적으로 HTTP Session Hi-jacking(세션 하이재킹)이다.
공격자가 중간에서 클라이언트의 세션ID을 중간에 가로채 사용한다면, 서버는 공격자를 클라이언트로 인식하여
웹서버에 접근 및 클라이언트의 정보를 제공하게된다.
서버의 메모리나 데이터베이스에서 session정보를 저장하기에, 확장성이 떨어질 수 있다.
'Cooka프로젝트 > 로그인기능' 카테고리의 다른 글
crypto모듈을 사용해 암호화 (0) | 2023.09.22 |
---|---|
express-session 이용한 로그인 구현 (0) | 2023.09.21 |