1. 세션이란?
- 서버 세션을 사용하면 클라이언트의 상태를 저장할 수 있음
- 쿠키와의 차이점은 세션은 웹 브라우저가 아니라 서버에 값을 저장한다.
- 서버는 세션을 사용해서 클라이언트 상태를 유지할 수 있기 때문에 로그인한 사용자 정보를 유지하기 위한 목적으로 세션을 사용한다. == 상태 유지 관리
ex) 인증/권한/장바구니 데이터 저장
1) 세션은 언제 생성하는가?
- 세션은 클라이언트인 웹 브라우저가 요청을 하면 하나의 세션 저장 공간을 생성한다.(웹 컨테이너는 한 웹 브라우저마다 한 세션을 생성)
예시) 학교 -> 입학 후 여기서 저장공간 사물함이 세션(session)을 의미한다.
익순이 - [저장공간 사물함]
익동이 - [저장공간 사물함]
익살이 - [저장공간 사물함]
- 세션은 하나의 웹 브라우저가 처음 요청을 했을 때 세션을 생성하고 그 이후로는 이미 생성된 세션을 사용한다.
- JSESSIONID라는 세션의 고유한 ID(비밀번호 같은..)를 부여
2) 세션은 언제 종료하는가?
- 웹 브라우저 종료(닫기)할 때
- 웹 브라우저 열기 + 요청/응답이 안일어나도 자동으로 종료되는 경우도 있음
- session.invalidate() 메서드를 사용하여 강제 세션 종료
-> 세션을 종료하면 다음에는 새로운 세션을 생성
3) 세션의 유효 시간
- 마지막 요청/응답이 있은 후에 20분 유효시간이 있음
- web.xml에서 직접 설정할 수 있음
> session-config 안에 session-timeout으로 세션이 살아있는 유효시간을 분 단위로 설정 가능
- session 객체의 setMaxInactiveInterval() 메서드를 사용하여 초 단위로 설정가능
- 세션이 유효 시간을 갖지 않으면 세션 객체가 메모리에서 제거되지 않아 메모리 부족 현상이 발생할 수 있음
4) 세션의 동작 방식
ㄱ. 클라이언트(웹 브라우저)가 웹 서버에 요청하여 세션 ID를 발급 받음
ㄴ. 클라이언트(웹 브라우저)는 세션 ID에 대해 쿠키를 사용해 저장하고 가지고 있음
ㄷ. 클라이언트(웹 브라우저)는 웹 서버에 요청할 때, 이 쿠키의 세션 ID를 같이 서버에 전달해 요청
ㄹ. 웹 서버는 세션 ID를 전달 받아 세션 ID로 세션에 있는 클라이언트(웹 브라우저)정보를 가져와서 사용
ㅁ. 클라이언트(웹 브라우저) 정보를 가지고 요청을 처리하여 클라이언트(웹 브라우저)에게 응답
2. 세션을 저장하고 읽어오는 예제
1) JSP 9가지 기본 객체 중 session을 사용
session.setAttribute("auth", "admin"); => 세션 저장
String logonID = (String)session.getAttribute("auth"); => 세션 값 가져오기
- session 기본 객체가 제공하는 세션 정보 관련 메서드
[결과]
3. 세션 생성 후 JSP 4가지 영역 이해하기
* JSP 4가지 Scope는 아래 링크의 6번 내용 참조
[SIST] JSP_days04
1. Web Server(웹 서버)와 WAS(Web Applictaion Server)란? 1) Web Server(웹 서버) ㄱ. 소프트웨어와 하드웨어로 구분 - 하드웨어 : Web Server가 설치되어 있는 컴퓨터 - 소프트웨어 : 웹 브라우저 클라이언트로..
yelin1217.tistory.com
1) JSP 페이지와 서블릿에서 세션을 사용하는 방법
서블릿 안에서 세션 다루는 부분은 예제는 없지만 서블릿에서 세션을 사용하는 방법 2가지의 차이점을 알고 넘어가면 사용하는데 큰 지장은 없다.
JSP 페이지에서 세션을 사용하는 방법 ? JSP 기본 객체 중 session 사용(setAttribute, getAttribute)
서블릿에서 세션을 사용하는 방법 ? request.getSession() 메서드를 통해서 세션 객체를 얻어옴
[주의] 아래 2가지의 차이점 이해
1) request.getSession(); - 세션이 존재하지 않으면 새로운 세션 객체를 생성해서 반환
2) request.getSession(false); - 세션이 존재하지 않으면 null을 반환
JSP 페이지에서 세션을 사용하는 방법
[ex05.jsp]
[ex05_02.jsp]
[결과]
1) ex05_02.jsp 바로 실행 시킴
2) ex05.jsp 실행 시킨 후 링크 태그 클릭 시
> job인 pageContext는 페이지가 바뀌어서 가져올 수 X
> deptno인 session은 세션 접속이 안끊어져서 가져올 수 있음
> empno인 request는 요청이 바뀌어서 가져올 수 X
> dbcp인 application은 서버가 종료되지 않아서 가져올 수 있음
> 브라우저를 다 닫은 후 ex05_02.jsp만 실행시키면 dbcp : oracle을 제외하고 나머지는 null이 나온다.
4. 세션으로 인증 처리하기(로그인, 로그아웃 기능)
[ex06_auth.jspf]
> ex06_default.jsp와 ex06_logout.jsp에서 세션 명의 세션 값을 가져올 때 include 사용 함
[ex06_default.jsp]
* ex06_default.jsp를 EL_JSTL로 코딩하면 아래와 같다.
[ex06_default_EL_JSTL.jsp]
[ex06_logon.jsp]
[ex06_logout.jsp]
[결과]
> 관리자 계정으로 로그인
> 일반 회원 park으로 로그인 및 로그아웃
5. 기타 여러 가지의 정보를 세션에 저장하는 방법
세션은 인증, 권한, 장바구니 정보를 저장하기도 하지만 기타 여러 가지의 정보를 세션에 저장할 때도 있다.
이런 경우에는 어떻게 사용하는지 알아보자
하나의 클래스를 선언해서 여러 가지 필드(정보)를 가지고 있는 객체를 생성하여 세션에 저장한다.
ex) 로그인 한 회원의 ID, 이름, 나이, 주소, 연락처 등등 로그인 정보를 세션에 저장
> 클래스를 선언 하지 않았다면 session 기본 객체를 사용하여 저장했을 것이다.
session.setAttribute("id", "admin");
session.setAttribute("name", "익순이");
session.setAttribute("age", "20");
> Member.java 클래스를 선언하여 회원의 정보를 담는 객체를 생성
Member m = new Member();
session.setAttribute("member", m); -> 세션에 멤버라는 객체를 저장
실제로 Member.java 클래스를 선언하여 회원의 ID, 이름, 나이, 주소, 연락처를 저장하는 객체를 생성해보는 예제이다.
[Member.java]
> Member.java 클래스에 필요한 정보를 필드로 선언하여 단축키로 디폴트 생성자와 생성자, get/set, toString을 오버라이딩을 해주면 된다.
[jsp 파일]
'TIL > View Template' 카테고리의 다른 글
[SIST] JSP_days08_JSTL(표준 태그 라이브러리) (0) | 2022.06.24 |
---|---|
[SIST] JSP_days07_표현언어(Expression Language) == EL (0) | 2022.06.23 |
[SIST] JSP_days07_커넥션풀 (0) | 2022.06.23 |
[SIST] JSP_days06/07_JSP 쿠키(Cookie) (0) | 2022.06.22 |
[SIST] JSP_자바빈(JavaBeans)과 <jsp:useBean> 액션 태그 (0) | 2022.06.20 |