Session

이윤근·2021년 8월 5일
0

Session

:일정 시간 동안 같은 브라우저로 부터 들어오는 일련의 요구를 하나의 상태로 보고 그 상태를 일정하게 유지시키는 기술

*일정 시간: 방문자가 웹 브라우저를 통해 웹 서버에 접속한 시점으로부터 웹 브라우저를 종료함으로써 연결을 끝내는 시점.방문자가 웹 서버에 접속해 있는 상태를 하나의 단위로 보고 세션이라 칭한다.

:서버가 Client에 유일하고 암호화된 ID를 부여
:중요 데이터는 서버에서 관리

1)동작 방식

(1)Login

1.사용자가 만일 정확한 아이디와 비밀번호를 입력했다면 서버에 인증이 성공했다고 판단할 것이다. 그럼 만약에 인증이 필요한 작업을 요청할 경우 또 로그인 과정을 거쳐야 할까? 그것은 아니다. 서버는 아이디와 비밀번호의 해시를 이미 알고 있기 때문에"인증에 성공했음"을 서버거 아 알고 있다면 매번 로그인 할 필요가 없는 것이다.

서버와 클라이언트에 각각 필요한 것은 서버는 사용자가 인증에 성공했음을 알고 있어야 하고,클라이언트는 인증 성공을 증명할 수단을 가지고 있어야 한다.

2.사용자가 인증을 성공한 상태를 세션이라 부른다.서버의 일종의 저장소에 세션을 저장한다.

3.세션이 만들어지면 각 세션을 구분할 수 있는 세션 아이디도 만들어진다.

4.클라이언트에 세션 성공을 증명할 수단으로써 세션 아이디를 전달한다. 이때 웹사이트에서 로그인을 유지하기 위한 수단으로 쿠키를 사용한다. 쿠키에는 서버에서 발급한 세션 아이디를 저장한다.

5.쿠키를 통해 유효한 세션 아이디가 서버에 전달된다.

6.세션 스토어에 해당 세션이 존재하는지 확인한다.

7,8.서버는 해당 요청에 접근 가능하다고 판단한다. 하지만 세션 아이디 정보가 업느 ㄴ경우 서버는 해당 요청이 인증되지 않았음을 알려준다.

(2)logOut
로그아웃은 세션 아이디가 담긴 쿠키는 클라이언트에 저장되어 있고,서버는 세션을 저장하고 있다. 서버는 그저 세션 아이디로만 요청을 판단한다.
로그아웃을 하기위해서는 서버의 세션을 삭제해야하고 클라이언트 쿠키를 갱신해야한다. 서버가 클라이언트의 쿠키를 임의로 삭제할 수 없다. 대신 set-cookie로 세션 아이디의 키값을 무효한 값으로 갱신해야 한다.

2)장점

1.서버에서 클라이언트의 상태를 유지하고 있으므로,사용자의 로그인 여부 확인이 용이하고,경우에 따라서 강제 로그아웃 등의 제재를 가할 수 있다.
2.클라이언트가 임의로 정보를 변경시키더라도 서버에서 클라이언트 상태 정보를 가지고 있으므로 상대적으로 안전한다.

3)단점

1.서버에서 클라이언트의 상태를 모두 유지 하고 있어야 하므로, 클라이언트 수에 따른 메모리나 디스크 또는 DB에 부하가 심하다.
2.사용자가 많아지는 경우 로드 벨런싱을 사용한 서버 확장을 이용해야하는데 이 떄 세션의 관리가 어려워진다.
3.웹 브라우저에서 세션 관리에 사용하는 쿠키는 단일 도메인 및 서브 도메인에서만 작동하도록 설계되어 CORS 방식(여러 도메인에 request를 보내는 브라우저)을 사용할 때 쿠키 및 세션 관리가 어렵다.
4.멀티 디바이스 환경(모바일, 브라우저 공동 사용 등)에서 로그인 시 중복 로그인 처리가 되지 않는 등의 신경 써줘야 할 부분들이 생긴다.

profile
성실한코딩러

0개의 댓글