세션이란?

  • 서로 관련된 요청 응답들을 하나로 묶은 것 (쿠키를 이용)
    • 원래 요청은 독립적 (서로 관계가 없음)
  • 브라우저 마다 개별 저장소(session객체)를 서버에서 제공 (1대1 관계)
    • 세션 객체마다 한 개의 아이디를 가지고 있음
  • 로그인 부터 로그아웃 까지

세션의 생성 과정

  • 클라이언트가 요청
  • 서버가 세션 객체 생성
  • 서버가 세션 아이디가 담긴 쿠키를 응답으로 보냄
    • 만약 브라우저에서 쿠키를 허용하지 않았을 경우를 감안해 url에 get방식으로 해당 쿠키 정보를 담아서도 전송
      • STS에서 url 태그가 자동으로 세션아이디를 붙여줌 (서버에서 처리)
      <form action="<c:url value='/login/login'/>" method="post" onsubmit="return formCheck(this);">
      // 반드시 링크에는 url 태그를 붙여주어야 함 그래야만 쿠키를 허용하지 않는 브라우저에도 세션 아이디를 제공하는 것이 가능
      
  • 브라우저에 쿠키가 저장
  • 클라이언트가 요청을 보냄(쿠키가 자동으로 포함되어 전송)
  • 서버가 요청 중에 쿠키가 포함된 세션 아이디를 확인하여 같은 브라우저에서 온 요청인지 확인
HttpSession session = request.getSession();
session.setAttribute("id","asdf");
  • 일치하는 세션 아이디의 개별 저장소 사용
  • jsp에서 session영역에서 접근하려면 sessionScope 사용
<c:set var="loginOutLink" value="${sessionScope.id==null? '/login/login':'/login/logout'}"/>
<c:set var="loginOut" value="${sessionScope.id==null? 'Login':'Logout' }"/>

세션의 종료

  • 수동 종료
HttpSession session = request.getSession();
session.invaildate(); // 세션을 즉시 종료
session.setMaxInactiveInterval(30*60); // 예약 종료(30분 후)
  • 자동 종료 - web.xml
<session-config>
	<session-timeout>30<session-timeout>
</session-config>
  • StandardManager가 자동으로 세션의 생성과 소멸을 관리한다 하더라도 서버에 부담이 크기 때문에 세션 저장소를 사용한다면 최소한의 데이터만을 담아야 한다.

쿠키 vs 세션

  • 쿠키
    • 브라우저에 저장
    • 서버 부담 X
    • 보안에 불리
    • 서버 다중화에 유리
  • 세션
    • 서버에 저장
    • 서버 부담 O
    • 보안에 유리
    • 서버 다중화에 불리

+ Recent posts