세션을 사용하면 서버는 클라이언트의 상태 값을 유지 할수 있기 때문에, 인증도니 사용자 정보를 유지하기 위한 목적으로 세션을 많이 사용한다.
01. 세션사용하기
세션은 웹 컨테이너에서 정보를 보관 할때 사용된다. 세션은 오직 서버에서만 사용된다.
웹컨테이너는 기본적으로 하나의 웹 브라우저에 하나의 새션을 생섢나다.
1.1 세션 생성하기
JSP에서 세션을 생성하기 위해서는 page 디렉티브의 session 속성을 true로 지정해 주면 된다.
<%@ page session = “true”%>
: page의 ssion 속성의 기본값은 true 이므로 session 속성의 값을 false로 지정하지만 않으면 세션이 생성된다. 일단 새션이 생성되면 session 기본 객체를 통해서 새션을 사용할수 있게 된다.
1.2 session 기본 객체
getID() : 새션의 고유 ID를 구한다.
getCreationTime() : 새션의 생성된 시간을 구한다. 단위는 1/1000초이다.
getLastAccessedTime() : 웹브라우저가 가장 마지막에 새션에 접근한 시간을 구한다. 단위는 1/1000초이다.
<@ page session = “true”%>
새션ID : <%= session.getID() %>
<%
time.setTime(session.getCreationTime());
%>
새션 생성 시간 : <%=formatter:format(time) %>
<%
time.setTime(Session.getLastAccessedTime());
%>
최근 접근 시간 : <%=formatter:format(time) %>
1.3 session 기본 객체의 속성 사용
생성된 세션은 지정된 유효시간 동안 유지된다. 따라서 request 객체가 하나의 요청을 처리하는데 사용되는 JSP페이지 사이에서 공유된다면, session 기본 객체는 웹 브라우저의 여러 요청을 처리하는 JSP페이지 사이에서 공유 된다. 따라서 로기은 한 회원정보등 웹 브라우저와 1:1 매핑이 되는 값을 저장할때에는 쿠키 대신 새션을 사용할수도 있다.
새션값을 저장할때는 속성을 사용한다. 속성에 값을 저장할때는 request 객체와 마찬가지로 setAtribute()메소드를 사용하며, 속성값을 사용할때는 getAttribute() 메소드를 사용한다.
<%
session.setAttribute(“NAME”,”홍길동”);
<%
String name = (String)session.getAttribute(“NAME”);
%>
회원명 : <%=name %>
1.4 세션 종료
<%
session.invalidate();
%>
* 세션이 한번 종료 되면, 다음에는 새로운 세션이 생성된다.
1.5 새션의 유효시간
– session.getLastAccessedTime()
web.xml파일에 <session-config>태그를 사용하여 세션 유효시간을 지정할수 있다.
<session-config>
<session-timeout>50</session-timeout>
</session-config>
<session-timeout>의 값을 0이나 음수로 설정하면 세션은 유효시간을 갖지 않는다.
명시적으로 session.invalidate() 메서드를 호출하지 않으면 생성된 세션 객체가 서버에서 제거되지 않고 유지된다.
세션 객체로 인해 메모리가 부족해지는 현상을 방지하려면, 반드시 세션 타임아웃 시간을 지정해 주어야 한다.
——————-setMaxInactiveInterval();
<%
setMaxInactiveInterval(60*60);
%>
<%
HttpSession httpSession = request.getSession();
List list = (List)httpSession.getAttribute(“list”);
list.add(productId);
request.getSession() 메서드는 session이 생성되어 있는 경우 생선된 sessionㅇ르 리턴하고 생성되어 있지 않은 경우 새롭게 session을 생성해서 리턴한다.
request.getSession(false)를 실행하면 session 객체가 생성된 경우에는 session 객체를 리턴하고 session 객체가 생성되어 있지 않은 경우에는 null을 리턶ㄴ다.<%
HttpSession httpSession = request.getSession(false);
List list = null;
if(httpSession != (List)httpSession.getAttribute(“list”);
}
else{
list = Collections.emptyList();
}
02.세션을 사용한 인증 저보 유지
1. 로그인인에 성공하면 session 객체의 특정 속성에 데이터를 기록한다.
2. 이후로 session 객체의 특정 속성이 존재하면 로그인한 것으로 간줗ㄴ다.
3. 로그아웃 할 경우 session.invalidate() 메서드를 호출하여 세션을 종료한다.
<%
String id = request.getParameter(“id”);
String password = request.getParameter(“password”);
if(id.equals(password)){
session.setAttribute(“MEMBERID”, id);
%>
———-
<%
String memberId = (String)session.getAttribute(“MEMBERID”);
boolean login = memberId == null ? false : true;
%>
2.3 로그아웃 처리
<%
session.invalidate();
%>
또는
<%
session.removeAttribute(“MEMBERID”);
%>
:::세션정보:::
<%@ page contentType = “text/html; charset=euc-kr” %>
<%@ 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”);
%>
<html>
<head><title>세션정보</title></head>
<body>
세션ID: <%= session.getId() %> <br>
<%
time.setTime(session.getCreationTime());
%>
세션생성시간: <%= formatter.format(time) %> <br>
<%
time.setTime(session.getLastAccessedTime());
%>
최근접근시간: <%= formatter.format(time) %>
</html>
<%@ page contentType = “text/html; charset=euc-kr” %>
<%
session.setAttribute(“MEMBERID”, “madvirus”);
session.setAttribute(“NAME”, “최범균”);
session.setMaxInactiveInterval(60*60); //시간설정
%>
<html>
<head><title>세션에 정보 저장</title></head>
<body>
회원명: <%= name %>
</html>
<%@ page contentType = “text/html; charset=euc-kr” %>
<%
session.invalidate();
%>
<html>
<head><title>세션 종료</title></head>
<body>
</html>
<?xml version=”1.0″ encoding=”euc-kr”?>
xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance”
xsi:schemaLocation=”http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd”
version=”2.4″>
<display-name>9장 예제</display-name>
<description>
9장의 예제 소스 코드 및 실행 코드
</description><session-config>
<session-timeout>1</session-timeout>
</session-config>
</web-app>
<%@ page contentType = “text/html; charset=euc-kr” %>
<%@ page import! = “jsp.util.Cookie!Box” %>
<%
String id = request.getParameter(“id”);
String password = request.getParameter(“password”);if (id.equals(password)) {
session.setAttribute(“MEMBERID”, id);
%>
<html>
<head><title>로그인성공</title></head>
<body>
</html>
<%
} else { // 로그인 실패시
%>
<script>
alert!(“로그인에 실패하였습니다.”);
history.go(-1);
</script>
<%
}
%>
<%@ page contentType = “text/html; charset=euc-kr” %>
<html>
<head><title>로그인폼</title></head>
<body>
method=”post”>
아이디 <input type=”text” name=”id” size=”10″>
암호 <input type=”password” name=”password” size=”10″>
<input type=”submit” value=”로그인”>
</form>
</html>
<%@ page contentType = “text/html; charset=euc-kr” %>
<%
String memberId = (String)session.getAttribute(“MEMBERID”);
boolean login = memberId == null ? false : true;
%>
<html>
<head><title>로그인여부 검사</title></head>
<body>
if (login) {
%>
아이디 “<%= memberId %>”로 로그인 한 상태
<%
} else {
%>
로그인하지 않은 상태
<%
}
%>
</body>
</html>
<%@ page contentType = “text/html; charset=euc-kr” %>
<%
session.invalidate();
%>
<html>
<head><title>로그아웃</title></head>
<body>
</html>