뉴렉처 학습(서블릿/JSP) 27강 ~ 28강
#27강 Session 객체로 상태 값 저장하기(그리고 Application 객체와의 차이점)
- Session 사용을 위해 기존 Application을 사용한 로직에서 Session을 사용한 로직으로 변경.
- Application객체는 Application 전역에서 사용할 수 있다는 의미이고, Session 객체는 Session 범주 내에서 사용할 수 있다는 의미이다.
- 여기서 Session은 현재 접속한 사용자를 의미하며, Session(현재 접속자)마다 공간이 달라질 수 있다는 의미.
- 브라우저가 달라지면 Session이 달라서 다른 사용자로 인식된다. 그래서 기존의 덧셈, 뺄셈 프로그램를 예로 크롬에서 5 입력 후 사칙연산(더하기 기능 or 빼기 기능) 입력 시 기존에는 5라는 값이 저장되고, 이후 입력되는 값과 '='을 입력하면 결과값이 나왔는데, 다른 브라우저를 열어 두 번째 입력 값을 입력 후 '='을 누르면 다른 Session 사용자로 인식되어 오류가 발생하게 된다.
#28강 WAS가 현재사용자(Session)을 구분하는 방식
- 브라우저를 이용해서 서버에 뭔가를 요청하면, 서버에는 사용자의 요청을 수반한 프로그램을 처리하다가 그 프로그램에서 다른 서블릿에게 전달(공유)하고 싶은 내용이 있으면 Application이라는 공간에 저장해둔다.
- Application 공간에는 사용자마다 저장할 수 있는 공간이 따로 존재한다.
- 사용자가 서버상에 있는 프로그램을 실행하기 위한 요청을 하면 서블릿이 실행된다. 해당 요청이 처음 왔을 경우에는 사용자는 새로운 사용자가 되는거고, 서버 쪽에서는 해당 사용자를 위한 Session은 존재하지 않는다.
- Application 이라는 공간은 모든 사용자 요청에 의해 실행되는 서블릿이 실행되다가 값을 남길 수 있지만, Session 공간은 사용자가 SID(SessionID)를 갖고 있어야만 값을 남길 수 있다.
- 요청 오면 처음에는 사용자 식별 아이디(SessionID)가 없어서 Appplication이라는 저장 공간만 사용가능하고, 되돌아 갈 때 서버에서 SID를 부여해주고, 다음 요청 시 브라우저가 갖고 있는 식별 SID를 통해 Session 공간도 사용할 수 있게 된다.
- 만약 브라우저가 달라질 경우에도 위와 같은 과정이 반복되며 SID가 부여된다.
*세션 메소드
- 세션은 타임아웃이 존재, 타임아웃에 따라 사용자 다르게 인식, 타임아웃은 동적으로 설정 가능하다.
void setAttribute(String name, Object value) : 지정된 이름으로 객체를 설정
Object getArttribute(String name) : 지정한 이름의 객체를 반환
void invalidate() : 세션에서 사용되는 개체들을 바로 해체 ( 설정해 둔것을 지우고 싶을때 사용 )
void setMaxInactiveInterval(int interval) : 세션 타임아웃을 정수(초)로 설정
boolean isNew() : 세션이 새로 생성되었는지를 확인
Long getCreationTime() : 세션이 시작된 시간을 반환(1970년 1월 1일을 시작으로 하는 밀리초)
long getLastAccessedTime() : 마지막 요청 시간(1970년 1월 1일을 시작으로 하는 밀리초)