내가 하는일/JAVA

세션과 쿠키 관련

Tenin 2011. 3. 2. 12:09

세션과 쿠키


세션과 쿠키를 사용하는 목적은 HTTP 프로토콜에서 상태를 지속시키기 위해서 이다. HTTP 프로토콜에서는 새로운 페이지를 실행시켰을 때 페이지에 관련된 정보가 남아있지 않고 초기화 되기 때문이다.

이러한 특성 때문에 특정 정보를 남기기 위해서 여러 가지 방법들이 동원되고 있다.

  • URL에 파라미터값 넘겨주기
  • 숨겨진 필드 사용하기
  • 쿠키사용하기
  • 세션사용하기

이러한 방법들은 각기 장단점과 특성들이 있기 때문에 어느 하나만을 고집하여 사용할 수 없는 상태이다.

1. 쿠키

쿠키는 세션과는 다르게 클라이언트의 정보를 서버에 두지 않고 각자의 클라이언트에 두게된다. 따라서 서버의 자원을 소모하지 않고 특정 정보를 유지 시키기 위한 좋은 방법이다. 그러나 몇가지 단점이 노출되는데, 이는

  • 보안에 노출되어 있고,
  • 사용자 브라우저에서 쿠키를 사용하지 않게 설정된다면 쿠키는 저장되지 않는다.

이러한 문제점을 염두해 두고 쿠키를 사용하길 바란다.

1) 주요 메소드

Cookie.setValue(value) 쿠키의 값을 지정한다.
Cookie.getValue() 쿠키의 값을 가져온다.
response.addCookie(cookie) 쿠키를 전송한다.
request.etCookie() 쿠키를 가져온다.
Cookie.setMaxAge(second) 쿠키의 생존시간을 정한다.
second > 0 : 정해진 시간동안 생존
second = 0 : 쿠키 삭제
second <0 : 부라우져가 끊어질때 까지 생존
Cookie.getName() 쿠키의 이름을 가져온다.

2) 쿠키 생성

쿠키는 javax.servlet.http 패키지 안에 Cookie클래스를 사용하여 작업한다.

쿠키 생성 및 설정 Cookie myCookie = new Cookie("cookie_name", "cookie_value")
쿠키 재설정 myCookie.setValue("cookie_value");
쿠키 전송(저장) response.addCookie(myCookie);

3) 쿠키 사용

쿠키 가져오기 Cookie[] cookie = request.getCookies()
쿠키 이름 읽기 cookie[i].getName()
쿠키 정보 사용 cookie[i].getValue()

4) 사용예

쿠키를 생성하고 저장한다.

  1. <!-- file name : cookie.jsp -->
  2. <%@page contentType="text/html;charset=8859_1"%>
  3. <%request.setCharacterEncoding("8859_1");%>
  4.  
  5. <% // cookie 사용예
  6. Cookie myCookie = new Cookie("id","itjava");
  7. myCookie.setMaxAge(60); //쿠키 유지시간 60초
  8. response.addCookie(myCookie);
  9.  
  10. %>
  11.  
  12. <a href="cookie_view.jsp">쿠키를 확인하려면 클릭하세요</a>

저장된 쿠키를 보여준다.

  1. <!-- file name : cookie_view.jsp -->
  2. <!-- 넘겨받은 cookie확인 -->
  3. <%@page contentType="text/html;charset=8859_1"%>
  4. <%request.setCharacterEncoding("8859_1");%>
  5. <%
  6. Cookie cookie[] = request.getCookies();
  7. for(int i=0 ; i<cookie.length; i++)
  8. {
  9.     out.print("name=" + cookie[i].getName());
  10.     out.print("<br>");
  11.     out.print("value=" + cookie[i].getValue());
  12.     out.print("<p>");
  13. }
  14.  
  15. %>

 

2. 세션(Session)

세션은 page지시자의 session 속성이 기본적으로 true값으로 되어 있기 때문에 사용자는 일반적으로 별도의 조치 없이 세션을 바로 생성하여 사용할 수 있도록 되어 있다.

세션관련 프로그래밍을 하기 전에 세션이 차지하고 있는 위치를 그림으로 살펴보자.

세션 영역은 사용자 마다 별도로 서버영역에 생성되며, 값은 서로 공유되지 않는다.

세션의 유지시간은 사용자가 별도로 지정할 수 있으며 기본값은 30분으로 지정되어 있다. 물론 시간내에 사용자가 다를 웹페이지로 이동하거나, 브라우저를 종료하면 바로 세션이 삭제되어 세션 정보를 안전하게 보호할 수 있다.

 

1) 세션 사용

<%@page session="true"%>

특별한 경우가 아니면 굳이 사용할 필요가 없다. 기본값으로 셋팅되어 있기 때문이다.

2) 세션 생성하기

  1. <%
  2. session.setAttribute("session_id","park");
  3. %>

3) 세션 가져오기

  1. <%
  2. String id=null;
  3. id = (String)session.getAttribute("session_id");
  4. %>

세션영역에 값을 저장할 때는 특별한 데이터 형이 없이 Object형태로 저장되기 때문에 세션에서 값을 가져올때는 반드시 특정 데이터형으로 캐스팅해서 사용해야 한다.

4) 세션정보 파괴하기(세션종료)

  1. <%
  2. session.invalidate();
  3. %>

invalidate()로 세션을 강제로 파괴할 수도 있지만, 브라우저를 닫거나, 다른 페이지로 이동할 때 그리고 세션타임아웃이되어도 세션이 파괴되어 세션에 저장된 값이 모두 삭제된다.

5) 세션 옵션 설정하기

  1. <%@page import="java.text.*, java.util.*"%>
  2. <% // session option
  3. session.setAttribute("session_id","park");
  4.  
  5. SimpleDateFormat fmt = new SimpleDateFormat("yy-MM-dd [ hh:mm:ss ]");
  6. long createTime = (long)session.getCreationTime(); // 세션 생성시간
  7. long lastTime = (long)session.getLastAccessedTime(); // 마지막 처리 시간
  8. %>
  9. session 생성 시간 ==> <%=fmt.format(new Date(createTime))%><br>
  10. session 마지막 처리 시간 ==> <%=fmt.format(new Date(lastTime))%><br>
  11. session 유지 시간 ==> <%=(int)session.getMaxInactiveInterval()%><br>
  12. session 유지 시간 변경 ==> <%session.setMaxInactiveInterval(5);%><br>
  13.  
  14. session값 표시 ==> <%=(String)session.getAttribute("session_id")%><br>
  15. session ID ==> <%=session.getId()%><br>
  16. session 유지 시간 ==>  <%=(int)session.getMaxInactiveInterval()%><br>

위의 결과는 실행할 때 마다 달라진다.