- 클라이언트가 웹 브라우저를 통해 서버에 접속한다.
- 용무를 처리한다.
- 웹 브라우저를 닫아 서버와의 접속을 종료한다.
위와 같은 일련의 과정을 세션이라 한다.
즉, 세션은 클라이언트가 서버에 접속해 있는 동안 그 상태를 유지하는 것이 목적이다.
HttpSession session = request.getSession();
request.getSession() 코드는 HttpServletRequest 객체에게 세션을 요청하는 코드입니다.
HttpSession session = request.getSession();
이 코드를 실행하면 서버는 요청에 대응하는 세션이 이미 존재하는지 확인합니다. 세션이 이미 존재한다면, 그 세션을 반환하고, 만약 세션이 존재하지 않으면 새로운 세션을 생성하여 반환합니다.
따라서 request.getSession();를 호출함으로써 세션을 "생성"하는 것입니다. 다른 일반적인 객체와는 다르게, HttpSession 객체는 사용자의 세션 상태를 유지하고 관리하는 데 사용되는 특수한 객체입니다. 이 객체는 웹 컨테이너(예: Tomcat, Jetty 등)가 관리하며, 개발자는 request.getSession()과 같은 메서드를 통해 접근할 수 있습니다.
개발자가 직접 new HttpSession()과 같이 세션 객체를 생성하는 것은 불가능합니다. 왜냐하면 HttpSession은 인터페이스이고, 이 인터페이스의 구현은 웹 컨테이너에 의해 제공되기 때문입니다. 따라서 세션을 가져오거나 생성하는 작업은 HttpServletRequest의 getSession() 메소드를 사용하여야 합니다.
String sessionID = session.getId();
: 세션의 아이디를 얻는다.
long creationTime = session.getCreationTime();
: 세션이 만들어진 시간이다.
long lastAccessedTime = session.getLastAccessedTime();
: 세션 최종 사용 시간
String id = request.getParameter("id");
: 이 코드는 HTTP 요청에서 "id"라는 이름의 파라미터 값을 가져옵니다. getParameter() 메소드는 클라이언트로부터 전달받은 데이터 중에서 지정된 이름의 파라미터 값을 문자열 형태로 반환합니다. 예를 들어, 클라이언트가 GET 방식으로 "/login?id=exampleUser"와 같은 요청을 보냈다면, request.getParameter("id")는 "exampleUser"라는 값을 반환합니다.
session.setAttribute("loginedId", id);
이 코드는 HTTP 세션에 "loginedId"라는 이름으로 값을 저장합니다. setAttribute() 메소드는 주어진 이름과 값을 세션에 저장하는 역할을 합니다. 이렇게 세션에 저장된 값은 서버가 클라이언트에게 응답을 보내고 나서도 서버 메모리에 유지됩니다. 따라서 클라이언트의 이후 요청에서도 세션을 통해 이 값에 접근할 수 있습니다.
세션의 ID값으로 클라이언트를 구별한다.(톰캣서버가 세션ID값을 모두 다르게 부여하기 때문이다.)
최종사용시간 30분이후(디폴트값) 세션객체는 소멸된다. 사용요청을 계속하면 세션객체는 유지된다.
세션은 페이지 이동을 해도 값이 유지된다.
세션 객체는 각 클라이언트(즉, 웹 브라우저를 통해 웹 사이트에 접속하는 사용자)마다 서버 측에 생성되며, 각 클라이언트의 상태 정보를 저장하는 역할을 합니다. 이러한 세션 객체는 웹 서버가 클라이언트를 구별하고, 클라이언트 간에 서로 다른 상태를 유지하는 데 사용됩니다.
예를 들어, 20명의 사용자가 한 서버에 접속했다면, 각 사용자마다 별도의 세션 객체가 생성되어 서버 측에 저장됩니다. 이렇게 생성된 각 세션 객체는 사용자마다 고유한 세션 ID를 가지며, 서버는 이 세션 ID를 통해 각 사용자를 구별하고, 각 사용자의 상태 정보를 관리합니다.
따라서 사용자가 로그인을 하면, 그 사용자의 로그인 정보(예: 사용자 ID)가 해당 사용자의 세션 객체에 저장됩니다. 그리고 그 사용자가 다른 페이지를 방문하거나 다른 요청을 보낼 때마다, 서버는 세션 ID를 통해 해당 사용자의 세션 객체를 찾아, 그 사용자의 상태 정보를 불러오거나 업데이트할 수 있습니다.
세션 객체는 HTTP와 같은 상태를 유지하지 않는(stateless) 프로토콜에서 상태 정보를 유지하는 데 필요한 중요한 도구입니다.