Session은 무엇일까?

뫄뫄(ahk)·2022년 9월 21일
0

Spring

목록 보기
12/18
post-thumbnail

이 게시글은 남궁성 강사님의 스프링의 정석 강의를 요약,정리한 글입니다.

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)
  • 브라우저의 쿠키 저장 여부를 몰라서 두 가지 방법으로 넘겨줌
  1. url의 뒤에 붙여서 넘겨줌
  2. response의 쿠키에 담아서 넘겨줌
  • 다음 요청부터
  1. 쿠키 허용을 하면,
    → 다음 요청부터 쿠키가 자동으로 따라감
  2. 쿠키 차단을 하면,
    → 브라우저의 모든 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
  • 보안에 불리
  • 서버 다중화에 유리

세션

  • 서버에 저장
  • 서버에 부담됨(유지기간을 짧게 해야)
  • 보안에 유리
  • 서버 다중화에 불리
profile
NONONONONONOYes!

0개의 댓글