클라이언트가 웹서버에 요청하여 처음 접속하면 서버가 클라이언트에 대하여 고유한 id를 부여해 서버가 클라이언트의 정보를 저장 관리하느 것
각 클라이언트 마다 고유한 ID 부여한다.
서로 관련된 요청들을 쿠키를 이용해 하나로 묶은 것이다
브라우저마다 개별 저장소( session 객체
)를 서버에서 제공받는다
쿠키
: 브라우저에 저장
session
: 서버에 저장
세션종료후에 새로운 세션이 생긴다
클라이언트 페이지요청 ( 웹사이트 접근 )
서버는 접근한 클라이언트의 Request-Header
에서 Cookie를 확인하여 클라이언트가 해당 session-id를 보냈는지 확인한다.
session-id가 존재하지 않는다면
브라우저가 서버에 첫 요청
을 보내고, 서버에서 session 객체 + 쿠키
를 생성해 클라이언트에게 전달한다.
다른 브라우저마다 다른 세션(ID) 객체가 존재한다
request header
로 부터 브라우저와 서버에서 세션id
가 일치하는 것들을 찾고 서버의 세션 객체
에 정보를 저장한다.
클라이언트 재접속시 쿠키(JSESSIONID)를 이용하여 session-id값을 서버에 전달한다.
저장 : setAttribute(String name , ObjectValue)
: 지정된 값 ( V )을 지정된 속성 이름 ( k )으로 저장
사용 : getAttribute(String name)
: 지정된 이름 으로 저장된 속성의 값 반환
HttpSession sesion = request.getSession(); //request -> HttpServletRequest
session.setAttribute("id","asdf");
세션 수동종료 : invalidate()
HttpSession session = request.getSession(); //request -> HttpServletRequest
session.invalidate(); // 1. 세션을 즉시 종료
session.setMaxInactiveInterval(30 * 60) // 2. 예약 종료 (30분 후)
세션 자동종료 : Web.xml 설정
분단위
<session-config>
<session-timeout>30</session-timeout>
</session-config>
세션은 이미 세션이 있을 떄 세션을 새로 만들지 않는다 . ( Session = false
의미 없다 )
세션이 없을 때
Session = true
: 세션을 새로 생성한다.Session = false
: 세션을 새로 생성하지 않는다.세션이 모든 단계에 있으면 서버부담이 크다.
SessionId가 필요없는 곳에서 session = false
로 설정 해줌으로써 sessionId를 저장할 필요가 있는 부분부터 세션이 시작하게 해서 부담을 줄여준다.
session = false
<%@ page session="false"%>
<c:set var="loginOutLink"
value="${pageContext.request.getSession(false).getAttribute('id')==null ? '/login/login' :'/login/logout' }" />
<c:set var="loginOut"
value="${pageContext.request.getSession(false).getAttribute('id')==null ? 'Login' : 'Logout' }" />
session = true
<%@ page session="true" %>
<c:set var="loginOutLink" value="${sessionScope.id== null ? '/login/login' : '/login/logout'}"/>
<c:set var="loginOut" value="${sessionScope.id== null ? 'Login' : 'LogOut'}"/>
sessionScope.id
👉pageContext.request.getSession(false).getAttribute('id')
getSession(true) 는 session이 없는 경우 session을 새로 생성하지 않기 때문에 session이 새로생성하지 않도록 getSession(false)를 사용한다.