JSP + Servlet | 세션

파과·2022년 7월 14일
0

JSP + Servlet

목록 보기
11/33

세션(session)

상태 유지 방법(다른 페이지로 이동하더라도 그 전 페이지의 정보 유지)의 하나인 쿠키는 쿠키가 저장되는 디렉토리만 뒤지면 얼마든지 정보를 얻어낼 수 있어 보안에 취약하고, 저장할 수 있는 데이터도 1.2MB로 한계가 있다.

상태 유지 방법 중의 하나인 세션(session)은
1. JSP(서버)에서만 접근 가능하므로 보안 유지에 강력하다.
2. 저장할 수 있는 데이터에 한계가 없다.

세션은 브라우저 단위당 한 개씩 존재하는, 서버 상에 존재하는 객체.
웹 브라우저를 닫기 전까지는 페이지를 이동하더라도 사용자의 정보를 잃지 않고 서버에 보관할 수 있도록 한다.

세션에 값 설정하기

setAttribute()로 세션에 이름과 값을 저장할 수 있다.

<%
	session.setAttribute("id", "pinksung");
	session.setAttribute("pw", "test1234");
	session.setAttribute("age", 20);
%>

세션에 저장된 값 얻어오기

getAttribute()로 세션에 저장한 값을 가져올 수 있다. 값은 이름으로 찾아 Object형으로 반환하고, 찾지 못하면 null값을 반환한다. Object형이기 때문에 반드시 적절한 형변환이 필요하다.

<% 
	String id = (String) session.getAttribute("id");
	String pw = (String) session.getAttribute("pw");
	Integer age = (Integer) session.getAttribute("age");
	String session_id = session.getId();
	
	//분 단위 - 사용자가 다음 요청을 보낼 때까지 세션을 유지하는 최대 시간(초) 반환한다.
	int inactive = session.getMaxInactiveInterval() /60;
%>

id: <%=id %><br>
pw: <%=pw %><br>
age: <%=age %><br>
session_id: <%=session_id %><br>
inactive: <%=inactive %> 

세션에 저장된 모든 값 얻어오기

  • getAttributeNames()로 세션 값들의 이름을 - java.util.Enumeration형으로 얻어온다. (import해줘야 한다.)
  • Enumeration에서 데이터를 뽑아오기 위해
    hasMoreElements()
    (더 가져올 데이터가 있는지 검사하여 있다면 true, 없다면 false 리턴)

    nextElement()
    (다음 데이터가 있다는 전제 하에 아이템을 하나씩 뽑아오는 역할을 한다)
    메소드를 사용한다.
<%
	Enumeration names = session.getAttributeNames();
	while(names.hasMoreElements()){
		String name = names.nextElement().toString();
		String value = session.getAttribute(name).toString();
		out.println(name + ": " + value + "<br>");
	}
%>

세션 관련 메소드

getId()

세션의 ID값을 String형으로 반환

getCreationTime()

세션이 만들어진 시간(웹 브라우저 띄운 시간)

getMaxInactiveInterval()

세션의 유효 시간(초단위) - 사용자의 마지막 요청(request)이 있은 후로부터 기본적으로 30분.
무한대로 지정하고 싶을 때는 -1로 지정한다.

세션 선택해 제거하기

session.removeAttribute() 사용

<%
session.setAttribute("s_name1", "저는 세션에 저장된 첫 번째 값이에요. ^ㅇ^");
session.setAttribute("s_name2", "저는 세션에 저장된 두 번째 값이에요. ^ㅇ^");
session.setAttribute("s_name3", "저는 세션에 저장된 세 번째 값이에요. ^ㅇ^");

out.print(" <h3> >> 세션값을 삭제하기 전 << </h3>");
Enumeration names;
names = session.getAttributeNames();
while(names.hasMoreElements()){
	String name = names.nextElement().toString();
	String value = session.getAttribute(name).toString();
	out.println(name + ": " + value + "<br>");
}

//이름을 지정하여 세션에 저장된 객체를 제거합니다.
session.removeAttribute("s_name2");

out.print("<hr><h3> >> 세션값을 삭제한 후 << </h3>");
names = session.getAttributeNames();
while(names.hasMoreElements()){
	String name = names.nextElement().toString();
	String value = session.getAttribute(name).toString();
	out.println(name + ": " + value + "<br>");
}
%>

설정된 모든 세션 제거하기

session.invalidate() 사용

<%
session.setAttribute("s_name1", "저는 세션에 저장된 첫 번째 값이에요. ^ㅇ^");
session.setAttribute("s_name2", "저는 세션에 저장된 두 번째 값이에요. ^ㅇ^");
session.setAttribute("s_name3", "저는 세션에 저장된 세 번째 값이에요. ^ㅇ^");

out.print(" <h3> >> 세션값을 삭제하기 전 << </h3>");
Enumeration names;
names = session.getAttributeNames();
while(names.hasMoreElements()){
	String name = names.nextElement().toString();
	String value = session.getAttribute(name).toString();
	out.println(name + ": " + value + "<br>");
}

session.invalidate();

out.print("<hr><h3> >> 세션값을 삭제한 후 << </h3>");
out.print(" Q: 과연 세션 아이디가 유효할까요? <br>");
if(request.isRequestedSessionIdValid()==true)
	out.print(" A: 세션 아이디가 유효합니다. <hr>");
else
	out.print(" A: 세션 아이디가 유효하지 않습니다. <hr>");
%>

0개의 댓글