1. 세션(session)
- API : http://docs.oracle.com/javaee/7/api/javax/servlet/http/HttpSession.html
쿠키가 웹 브라우저에 사용자의 상태를 유지하기 위한 정보를 저장했다면, 세션(session)은 웹 서버 쪽의 웹 컨테이너에 상태를 유지하기 위한 정보를 저장한다.
세션은 사용자의 정보를 유지하기 위해 javax.servlet.http 패키지의 HttpSession 인터페이스를 구현해서 사용한다. 쿠키는 사용자의 상태 유지를 위한 정보를 웹 브라우저에 저장해서 웹 서버가 쿠키 정보를 읽어서 사용한다.
이것은 웹 브라우저에 저장된 쿠키는 웹 서버에서 열어볼 수 있다는 점에서 보안상 문제가 발생할 수 있다.
따라서 사용자의 정보를 유지하기 위해서는 쿠키를 사용하는 것보다 세션을 사용한 웹 브라우저와 웹 서버의 상태 유지가 훨씬 안정적이고, 보안상의 문제도 해결할 수 있다.
세션은 웹 브라우저 당 1개씩 생성되어 웹 컨테이너에 저장된다.
- 쿠키와 달리 웹 브라우저에 정보를 보관하는 것이 아니라, 웹 컨테이너에 정보를 보관할 때 사용한다.
- 오직 서버에서만 생성된다.
- 하나의 웹 브라우저에 하나의 세션을 생성한다.
- 웹 브라우저의 여러 요청을 처리하는 JSP 페이지 사이에서 공유되므로 1:1 매핑되는 값을 저장할 때 사용한다.
- 세션이 쿠키보다 보안에 앞서고, 쿠키 설정 여부에 상관없이 사용이 가능하다.
2. 세션 메소드 리스트
메소드 이름 | 리턴 타입 | 설명 |
getAttribute(String name) | java.lang.Object | 세션 속성명이 name인 속성의 값을 Object 타입으로 리턴한다. 해당 되는 속성명이 없을 경우에는 null 값을 리턴한다. |
getAttributeNames() | java.util.Enumeration | 세션 속성의 이름들을 Enumeration 객체 타입으로 리턴한다. |
getCreationTime() | long | 1970년 1월 1일 0시 0초를 기준으로 하여 현재 세션이 생성된 시간까지 경과한 시간을 계산하여 1/1000초 값으로 리턴한다. |
getId() | java.lang.String | 세션에 할당된 고유 식별자를 String 타입으로 리턴한다. |
getMaxInactiveInterval() | int | 현재 생성된 세션을 유지하기 위해 설정된 세션 유지시간을 int형으로 리턴한다. |
invalidate() | void | 현재 생성된 세션을 무효화 시킨다. |
removeAttribute(String.name) | void | 세션 속성명이 name인 속성을 제거한다. |
setAttribute(String name, Object value) | void | 세션 속성명이 name인 속성에 속성값으로 value를 할당한다. |
setMaxInactiveInterval(int interval) | void | 세션을 유지하기 위한 세션 유지시간을 초 단위로 설정한다. |
3. 세션 생성
- <@ page session = "true" %>
- session.setAttribute("세션이름", "값");
- page 디렉티브의 session 속성의 기본값은 ture 이므로 false로 지정하지 않으면 자동 생성된다.
4. 세션 기본 객체
- setAttribute(), getAttribute() 등의 메서드를 사용하여 속성값을 저장하거나 읽어오고, 세션만의 고유 정보를 제공한다.
- 각각의 세션을 구분하기 위해 고유의 세션 ID를 할당한다.
- 세션 ID는 쿠키를 통해서 웹 브라우저에 전달된다.
- 가장 최근에 사용한 시간을 기록한다.
<!-- session.jsp --> <%@page import="java.text.SimpleDateFormat"%> <%@page import="java.util.Date"%> <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <% Date t = new Date(); SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>세션 정보</title> </head> <body> 세션 ID : <%= session.getId() %><br> <% t.setTime(session.getCreationTime()); %> 세션 생성시간 : <%= sf.format(t) %><br> <% t.setTime(session.getLastAccessedTime()); %> 최근 접근시간 : <%= sf.format(t) %> </body> </html> <!-- 실행결과 세션 ID : 7FE891620D3A4A35E80FBBD176B86116 세션 생성시간 : 2013-09-22 03:33:10 최근 접근시간 : 2013-09-22 03:34:12 -->
5. 세션 기본 객체의 속성
- 세션의 값을 저장할 때 속성을 사용한다.
- 세션 기본객체의 속성을 저장하면 세션이 종료되기 전까지는 속성값을 사용할 수 있다.
<!-- setSession.jsp --> <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <% session.setAttribute("ID", "gz"); session.setAttribute("NAME", "갱짱"); %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>세션에 정보 저장</title> </head> <body> 세션에 정보를 저장~<br> <% String id = (String) session.getAttribute("ID"); String name = (String) session.getAttribute("NAME"); %> <br> 아이디 : <%= id %><br> 이름 : <%= name %><br> </body> </html> <!-- 실행결과 세션에 정보를 저장~ 아이디 : gz 이름 : 갱짱 -->
6. 세션 종료
- invalidate() 메서드를 사용하여 세션을 종료한다.
- 세션이 종료되면 기존에 사용하던 세션 기본 객체가 삭제되고 다음에 세션을 사용할 때에는 새로운 세션 기본객체가 사용된다.
7. 세션 유효시간
- 세션은 마지막 접근 시간으로부터 일정 시간 이내에 다시 세션에 접근하지 않을 경우 자동으로 종료하는 기능을 갖고 있다.
- 세션의 유효시간은 web.xml 파일에 <session-config> 태그로 설정하는 방법과 setMaxInactiveInterval() 메서드를 사용하는 2가지 방법이 있다.
- <session-timeout> 의 값을 0이나 음스로 설정하면 세션은 유효 시간을 갖지 않는다.
- 유효시간이 없는 상태에서 invalidate() 메서드를 명시적으로 실행하지 않으면 한번 생성된 세션 객체는 계속 메모리에 남아 있게 된다.
<!-- web.xml --> <session-config> <session-timeout>60</session-timeout> </session-config>
<% session.setAttribute("ID", "gz"); session.setAttribute("NAME", "갱짱"); session.setMaxInactiveInterval(60 * 60); %>
'IT기술 > JAVA' 카테고리의 다른 글
jsp 유효성 검사 (0) | 2018.10.06 |
---|---|
jsp 넘어온 값(request) 확인 (0) | 2018.10.06 |
중복로그인 체크/ 차단하기, 세션 기존접속 끊기 (3) | 2017.03.22 |
servlet 이란 무엇인가? (0) | 2017.03.22 |
JSP 파일 업로드 시키기. cos 모듈을 이용, 이클립스 사용 (0) | 2016.05.16 |