Spring - 8. 쿠키와 세션

병호·2023년 8월 16일
1

Spring

목록 보기
8/16
post-thumbnail

1. 쿠키



클라이언트가 서버에 요청을 하면 서버가 위 코드를 수행하게 되고 쿠키만 만들어지고 이 쿠키를 응답에 담아서 보낸다. 서버가 보내준 쿠키는 브라우저에 저장된다. 이후로 클라이언트에서 요청했을 때, 서버가 보내준 쿠키의 정보가 서버의 정보와 일치하면 자동으로 쿠키가 클라이언트가 보내준 요청과 함께 서버로 간다. 쿠키는 클라이언트를 구별하기 위한 기술로, 서버에서 보내더라도 클라이언트에서 받고 싶지 않으면 받지 않을 수 있고 클라이언트가 삭제할 수도 있다.

위는 서버에서 쿠키를 생성하는 코드이다. 서버에서 쿠키를 생성하고 응답헤더에 유효기간을 상대시간과 절대시간으로 적어서 클라이언트에 보내준다.

쿠키의 삭제와 변경


쿠키를 삭제하기 위해서는 변경할 쿠키와 같은 이름의 쿠키를 생성하고 쿠키의 유효기간을 0으로 설정하고 응답에 쿠키를 추가해서 클라이언트에 전달해주면 된다. 쿠키의 변경으로는 변경할 쿠키와 같은 이름의 쿠키를 생성하고 값과 도메인, 경로, 유효기간을 변경하고 응답에 쿠키를 추가해주면 된다.(중요** -> 응답에 쿠키 추가)

쿠키 읽기



브라우저가 쿠키를 받고 다시 요청하면 자신이 가지고 있는 쿠키의 정보를 위 요청메시지에 보여준다. domain과 path를 보고 일치하는 쿠키를 찾아서 배열로 헤더에 넣어서 보내준다.

2. 세션

세션이란 서로 관련된 요청들을 하나로 묶은 것 - 쿠키를 이용

browser마다 개별 저장소(session객체)를 서버에서 제공

쿠키는 브라우저에 저장되고 세션은 서버에 저장된다.

세션을 끝내는 방법은 수동종료(invalidate()), 자동종료(timeout()) 방법이 있다. 세션이 끝나게 되면 새로운 세션ID가 발급이된다. 세션은 로그인부터 로그아웃까지를 하나의 세션으로 볼 수 있다.

세션의 생성 과정


처음에 브라우저가 요청을 하면 서버가 무조건 세션객체(저장소)를 만든다. 세션객체마다 세션ID를 가지고 있고 저장소를 쓸 수 있게 세션 아이디가 담긴 쿠키를 만들어서 응답으로 보낸다. 위 그림에서 Set-Cookie는 쿠키를 만드라는 의미이고 뒤에는 세션아이디가 들어간다. 이렇게 쿠키를 보내면 브라우저에는 쿠키가 저장되고 그 뒤로 요청을 보내면 쿠키가 자동으로 따라간다.

요청을 보내면 위와 같이 요청헤더에 쿠키가 세션아이디를 포함하여 간다.이후로 서버에서 쿠키에 있는 세션아이디와 일치하는 저장소를 사용할 수 있다.

같은 pc에 있더라도 브라우저에 따라 다른 세션을 받아 저장하고 있으므로 브라우저A,B가 보낸 요청을 구별할 수 있다. 세션을 받아서 session.setAttribute메서드로 세션 저장소에 key, value 형태로 저장소를 사용할 수 있다. 세션정보는 요청 헤더에 있으므로 request객체에 정보를 담아 이를 사용할 수 있다.

세션과 관련된 메서드

세션의 종료


수동 종료는 초단위, 자동 종료는 분단위이다.

요청과 다음 요청사이의 간격이 30분이 넘으면 세션 timeout이 되서 응답으로 새로운 세션 ID를 준다. 그 후로는 요청에서 새로운 세션ID를 사용한다. 세션은 서버에 부담이 많이 되므로 최소한의 데이터만 사용하는게 좋다.

쿠키 vs 세션

profile
안녕하세요

0개의 댓글