해결된 질문
작성
·
1.6K
2
강의에서 다음과 같이 설명하셨습니다.
세션은 서버에 저장된다.
브라우저(클라이언트) 종료 시점에 세션은 삭제된다
세션의 저장 장소는 서버인데 어떻게 클라이언트의 종료 시점에 삭제될 수 있는 것인가요?
HTTP 는 connectionsless 하기 때문에 클라이언트의 종료 시점을 서버가 파악할 수 없지 않나요?
쿠키 안에 세션 ID를 저장한다고 하였는데 브라우저 종료 시점에서 이 세션ID만 삭제하는 것인가요?
만약 이게 맞다면 삭제된 세션ID에 해당하는 서버에 저장된 세션은 언제까지 유지되나요?
답변 1
0
안녕하세요 현강님. 질문에 대한 답변 드리겠습니다!!
세션은 서버에 저장되며 각 클라이언트에는 세션 ID가 쿠키로 저장됩니다. 말씀하신 것처럼 HTTP는 connectionless하고 stateless이기 때문에 클라이언트의 종료 시점을 서버가 직접적으로 알 수 없습니다. 그렇기 때문에 세션의 삭제는 클라이언트 종료 시점이 아니라 다른 방식으로 처리됩니다.
강의에서 설명한 "브라우저(클라이언트) 종료 시점에 세션은 삭제된다"는 주로 세션 쿠키(클라이언트에 저장된)에 대한 설명입니다. 세션 쿠키는 브라우저가 종료되면 자동으로 삭제되는 휘발성 쿠키입니다. 이 때 저장된 세션 ID도 삭제되기 때문에, 클라이언트가 서버에 다음 요청을 보낼 때 이전의 세션 ID를 참조할 수 없게 됩니다.
하지만 서버에 저장된 세션 데이터는 즉시 삭제되지 않습니다. 대신 서버는 일정 시간이 지나면서 세션 데이터를 만료시키고 삭제하는데, 이 시간을 '세션 타임아웃'이라고 부릅니다. 세션 타임아웃은 서버 설정에 따라 다릅니다. 세션 타임아웃이 되면 서버는 해당 세션 데이터를 삭제하고, 새로운 요청에 대해서는 새로운 세션을 생성합니다.
따라서 브라우저 종료 시점에는 클라이언트에 저장된 세션 ID가 삭제되지만, 서버에 저장된 세션은 일정 시간 동안 유지됩니다. 이 기간이 지난 후에는 서버가 세션 데이터를 삭제하여 서버의 메모리를 확보하게 됩니다.
혹시 질문에 대한 답이 됐을까요!??
더 궁금하신 점이 있다면 언제든 질문 주세요:)
여기서 사용하는게 세션쿠키 이기 때문에 브라우저를 종료했다가 다시 켜면, 서버에 요청할 당시에 쿠키에 session_id 가 부재한 상황이라 서버가 session_id 를 신규로 발급하도록 구현할 수 있습니다!
관련 내용 링크 첨부해드립니다!
https://www.inflearn.com/questions/442445/%EC%84%B8%EC%85%98-%EC%BF%A0%ED%82%A4-%EC%A7%88%EB%AC%B8-%EC%9E%88%EC%8A%B5%EB%8B%88%EB%8B%A4
안녕하세요! 추가적으로 저도 관련해서 이부분이 궁금해서 찾아보게 되었는데 추가적으로 질문드리면 그럼 브라우저를 종료했다가 다시 접속했을 경우에 서버는 브라우저의 이전 상태를 기억하지 못하고 (이전 사용했던 세션 ID가 브라우저 삭제되었기 때문) 새로운 ID를 서버에 보내주고 서버는 다시 새로운 ID에 맞는 브라우저의 상태를 저장해두고 하는 방식일까요? 아니면 세션 ID가 브라우저가 종료될 때가 삭제 되기는 하지만 발급받을때마다 브라우저마다 똑같은 값이 할당되어서 서버에서 "아 걔가 걔구나" 하고 알 수 있는 건가요 ..?