이 게시글은 남궁성 강사님의 스프링의 정석 강의를 요약,정리한 글입니다.
session이란?
- a collection of related HTTP transactions made by one browser to one server 서로 관련된 요청,응답(각각은 독립적, 관계x/ 보통 브라우저-서버 1:1관계에서 발생하는 HTTP 통신)들을 하나로 묶은 것(쿠키, jsessionid를 이용하여 관련성을 만들어줌)
- 위와 같은 관련된 요청,응답들을 처리할 때 같은 sessionId가지고 다니게 해서 하나의 세션 저장소를 사용할 수 있다.
- 각 브라우저마다 session 저장소를 서버에서 제공(sessionId를 저장하는 역할인 쿠키가 브라우저에 저장되어서 브라우저마다 sesssion저장소를 생성함)
- ‘첫 요청’에 서버에서 자동으로 JSESSIONID를 쿠키로 브라우저에 넘겨줌
- 브라우저에서 JSESSIONID를 쿠키로 저장하기 전까지 서버에서 계속 새로운 sessionid를 보낸다(stateless)
- 브라우저의 쿠키 저장 여부를 몰라서 두 가지 방법으로 넘겨줌
- url의 뒤에 붙여서 넘겨줌
- response의 쿠키에 담아서 넘겨줌
- 쿠키 허용을 하면,
→ 다음 요청부터 쿠키가 자동으로 따라감
- 쿠키 차단을 하면,
→ 브라우저의 모든 url뒤에 jsessionid가 붙어 서버에 요청을 보낼 때 같이 가게함
→ 링크에는 반드시 <c:url … > 사용
session의 생성과 종료에 대해서는 따로 정리하지 않겠다. 하지만 session객체를 jsp페이지에서 얻을 때에 헷갈리는 점이 있어서 session객체 얻기는 간략하게 정리해봤다.
Session 객체 얻기
HttpSession session = request.getSession(); //request에 sessionId가 있으니까
session.setAttribut("id", "asdf");
- getSession()
요청과 관련된 현재 session을 반환하고, session이 없다면 생성하여 반환
- getSession(boolean)
요청과 관련된 현재 HttpSession을 반환하고, session이 없다면 true일 때 session을 생성, false일 때는 생성하지 않는다.
- jsp 페이지에 사용된 request.session…은 servlet으로 변환될 때 request.getSession()이 되므로 주의해서 사용해야한다.
쿠키 vs 세션
쿠키
- 브라우저에 저장
- 서버부담 x
- 보안에 불리
- 서버 다중화에 유리
세션
- 서버에 저장
- 서버에 부담됨(유지기간을 짧게 해야)
- 보안에 유리
- 서버 다중화에 불리