7. 쿠키와 세션
- 웹 프로그램은 기본적으로 현재 페이지에서 다른 페이지로 이동하면 현재 페이지에 저장된 값들이 모두 소멸됨
- 다수의 페이지로 구성된 웹 애플리케이션에서 사용자의 편의를 위해 인증 후의 값을 유지할 필요가 있음
- 웹을 지원하는 통신 규약 HTTP는 비연결 또는 무상태 특성을 가짐
- 장점
- 서버에 접속한 클라이언트 수가 많아도 서버의 부담이 적음
- 웹의 비연결 특성은 초기에 웹 서비스를 빠르게 성장시킨 계기 - 단점
- 정보를 유지해야 할 부분도 있는데 정보를 유지할 수가 없음
예) 인터넷 쇼핑몰에서 상품을 구매할 경우, 사용자는 장바구니에 상품을 담기도 하고 삭제하기도 함, 이럴 경우, 장바구니 페이지는 다른 페이지로 이동해도 장바구니의 정보를 유지해야 하는데 HTTP의 비연결성이 이것을 어렵게 함 - 이러한 비연결성을 보완하고 페이지 간의 지속성 서비스를 제공하기 위해서 쿠키, 세션이 있음
7.2 쿠키와 세션
7.2.1 cookie
클라이언트에 저장
보안 취약
쿠키 조작 및 변조 가능
복잡한 코드 작성
7.2.2 session
서버에 저장
보안 우수
서버의 성능 저하 주의
쿠키보다 코드 작성 방법이 쉬움
7.3 쿠키
쿠키 생성 폴더
C:\Users\사용자계정\AppData\Roaming\Microsoft\Windows\Cookies\Low
7.3.2 간단한 쿠키 테스트
웹 브라우저 주소창에 javascript:alert(document.cookie) 입력
7.3.3 쿠키 생성 및 수정
response.addCookie(new Cookie("쿠키변수명", "값"));
response.addCookie(new Cookie("age", "10"));
7.3.4 쿠키 읽기
7.3.4.1 java code 방식
Cookie[] cookies = request.getCookies();
if (cookies != null) {
for (int i = 0; i < cookies.length; i++) {
if (cookies[i].getName().equals("쿠키변수명")) {
out.println("이름 : " + URLDecoder.decode(cookies[i].getValue(), "utf-8"));
}
}
}
7.3.4.2 EL(Expression Language) 방식: ${cookie.쿠키변수명.value}
7.3.5 쿠키 변수는 String Type만 가능하며 특수문자, 한글을 사용하고자 할 경우 인코딩시켜야 함
response.addCookie(new Cookie("name", URLEncoder.encode("김기사", "UTF-8")));
7.3.6 쿠키 삭제
Cookie cookie = new Cookie("name", ""); // name 변수 값을 빈 값으로 설정
쿠키.setMaxAge(seconds) // 쿠키의 유효기간을 초단위로 설정
쿠키.setMaxAge(0) // 쿠키가 즉시 삭제됨
쿠키.setMaxAge(-1) // 브라우저를 닫으면 쿠키가 삭제됨???????
7.4 세션
7.4.1 세션 생성 및 수정
session.setAttribute("세션 변수명", 세션값)
세션값에는 모든 Type을 저장할 수 있음, 특수문자/한글도 사용가능함
4.2 세션 읽기
session.getAttribute("세션 변수명")
4.3 세션의 유효시간 설정
4.3.1 코드에 직접 설정하는 방법 : session.setMaxInactiveInterval(초);
4.3.2 web.xml에 설정하는 방법(분 단위)
<session-config>
<seesion-timeout>30</session-timeout>
</session-config>
4.4 세션 삭제
개별 삭제 : session.removeAttribut("세션변수명");
전체 삭제 : session.invalidate();
5. 실습 예제
01) /include/header.jsp
JSTL(Jsp Standard Tag Library, JSP 표준 태그 라이브러리) 다운로드
http://tomcat.apache.org/download-taglibs.cgi 에서 jar 파일 4개를 다운로드 받은 후 WebContent/WEB-INF/lib 디렉토리에 복사
02) /ch07/makeCookie.jsp (쿠키 생성)
03) /ch07/useCookie.jsp (쿠키 사용)
04) /ch07/deleteCookie.jsp (쿠키 삭제)
05) /ch07/editCookie.jsp (쿠키 수정)
06) common.Util.java (쿠키 수정)
07) /ch07/counter.jsp (쿠키를 이용한 이미지 카운터)
13) web.xml에 추가 (세션 유효시간 설정)
14) /ch07/sessionTime.jsp (세션 유효시간)