a collection of related HTTP transactions made by one browser to one server
요청, 응답들을 묶을 때는 브라우저에 저장되는 쿠키를 사용한다.
세션의 사용과정을 들여다보면,
1. 브라우저에서 서버에 첫 요청을 보내면
2. 서버는 세션 저장소를 생성하고 고유한 sessionID를 쿠키에 담아(또는 url에 붙여) 응답헤더로 보낸다.
3. 브라우저는 자신이 가지고 있는 쿠키들 중에 저장된 path와 domain이 요청을 보낼 서버의 것과 일치하는 쿠키가 있다면 요청에 그 쿠키를 담아서 보낸다.
4. 서버는 돌아온 쿠키의 sessionID를 통해 브라우저를 식별한다.
5. 그 sessionID를 통해 세션저장소를 사용할 수 있다.
HttpSession session = request.getSession();
session.setAttribute("id","asdf");
세션을 수동으로 종료하기 위해서는 아래와 같은 메서드를 사용할 수 있다.
두 번째 메서드는 예약종료가 가능하다.
시간 설정은 초단위.
session.invalidate();
session.setMaxInactiveInterval(60*60);
세션을 자동으로 종료할 수 있다. 세션은 브라우저마다 생성되므로 서버에 부담이 되기 때문에 자동 종료를 설정해서 최대한 자원의 낭비를 막는 것이좋다. 시간의 설정은 분단위.
<session-config>
<sesssion-timeout>30</session-timeout>
</session-config>
쿠키는 브라우저에 저장되어 서버에 부담을 주지 않고 서버 다중화에 유리하다. 하지만 저장되는 장소가 브라우저니까 서버보다 보안에 불리하다.
세션은 서버에 저장되어 세션이 많아질 수록(=접속자가 많아질 수록) 서버에 부담이 되고 브라우저에 저장되는 쿠키보다 보안에 유리하다. 그러나 서버가 여러대인 경우 요청이 여러 서버에 분산되어 동기화가 필요하기 때문에 서버 다중화에 불리하다.
브라우저가 쿠키를 허용하지 않을 수 있어서 위의 두 가지 방법으로 sessionID를 보낸다.
(쿠키를 허용하지 않으면 url때문에 응답양이 많아진다.)