세션(session)

JSP 2016. 3. 9. 14:11

세션(session)

- 웹 컨테이너에서 클라이언트의 정보를 보관할 때 사용한다.

- 오직 서버에서만 생성

- 클라이언트마다 세션이 생성된다.





1. 세션과 session 기본 객체

page 디렉티브의 session 속성 값을 true로 지정
- 세션이 존재하지 않을 경우 세션이 생성되고, 세션이 존재할 경우 이미 생성된 세션을 사용

session 기본 객체를 이용해서 세션에 접근
- session의 기본 값은 true이므로 false로 하지 않는 이상 항상 세션 사용

<%@ page contentType = ... %>
<%@ page session = "true" %>
<%
    ...
    session.setAttribute("userInfo", userInfo);
    ...
%>

속성 이용해서 클라이언트 관련 정보 저장


1) session 기본 객체
getId() : 세션ID를 구한다.
getCreationTime() : 세션 생성시간을 구한다. (1970년 1월 1일 이후 흘러간 시간. 단위는 1/1000초)
getLastAccessedTime() : 브라우저가 가장 마지막에 세션에 접근한 시간을 구한다.

예제) 세션ID, 생성시간, 마지막 접근 시간을 출력하는 sessionInfo.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"    pageEncoding="UTF-8"%>
<%@ page session = "true" %>
<%@ page import = "java.util.Date"%>
<%@ page import = "java.text.SimpleDateFormat"%>
<%
Date time = new Date();
SimpleDateFormat formatter =new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>세션 정보</title>
</head>
<body>
<ul>
<li>세션ID : <%= session.getId() %></li>
<% time.setTime(session.getCreationTime()); %> // 세션의 생성시간을 Date 객체인 time에 저장.
<li>세션 생성시간 : <%=formatter.format(time) %></li>
<% time.setTime(session.getLastAccessedTime()); %> // 마찬가지로 접근시간을 time에 저장
<li>최근 접근시간 : <%=formatter.format(time) %></li>
</ul>  
</body>
</html>
  • 세션ID : 93C900539BD2624D5483EEB23AD10931
  • 세션 생성시간 : 2016-03-09 14:28:30
  • 최근 접근시간 : 2016-03-09 14:36:45


2) session 기본 객체의 속성 사용

<%@ page language="java" contentType="text/html; charset=UTF-8"    pageEncoding="UTF-8"%>
<%
session.setAttribute("MEMBERID", "madvirus");
session.setAttribute("NAME", "홍길동");
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>세션에 정보 저장</title>
</head>
<body>
세션에 정보 저장
</body>
</html>

세션에 속성을 입력할 때에는 session.setAttribute, 불러올 때에는 session.getAttribute로 불러오면 된다.




2. 세션 종료 / 타임 아웃


1) 세션 종료

session.invalidate() 을 이용해서 세션 종료

- 세션이 종료되면 기존에 생성된 세션이 삭제

- 이후 접근 시 새로운 세션 생성 됨


<%@ page language="java" contentType="text/html; charset=UTF-8"    pageEncoding="UTF-8"%>

<% 

session.invalidate();

%>

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>세션 종료</title>

</head>

<body>

세션을 종료하였습니다.

</body>

</html>



2) 세션 유효 시간

마지막 세션 사용 이후 유효 시간이 지나면 자동 종료된다.

- web.xml 파일에서 지정

<session-config>

    <session-timeout>

        30

    </session-timeout>

</session-config>


- 또는 session 기본 객체의 setMaxInactiveInterval() 메서드 이용해서 지정

초 단위 지정



유효시간이 없는 상태에서 session.invalidate() 메서드를 실행하지 않으면 

세션 객체가 계속 메모리에 남게 되어 메모리 부족 현상을 겪게 된다. 

반드시 세션 타임아웃 시간을 지정해줘야 한다.






session 기본 객체에 저장될 값 타입


필요한 값을 개별 속성으로 저장하는 것 보다는 속성을 하나로 묶은 자바 클래스를 작성해서 저장하는 것이 좋음

- 필요한 값을 개별 속성으로 저장 : 유지 보수 불편 (신규 속성 추가시 변경할 코드 증가 등)

- 속성을 하나로 묶은 자바 클래스를 작성해서 저장 : 유지 보수 편리





Posted by netyhobby
,