intro. 쿠키와 세션을 사용하는 이유?
- 사용자의 정보를 지속적으로 유지하기 위해
- HTTP 프로토콜은 비 연결지향형 통신이기 때문에 클라이언트에서 서버로정보 보내 처리 결과를 클라이언트가 받으면 기존에 있던 정보는 잃어버리기 때문에 쿠키와 세션을 이용하는 것이다. (대표적으로 로그인,장바구니 기능이 있다.)
1. 쿠키(Cookie)
1-1. 정의
- 사용자의 정보를 지속적으로 유지하기 위한 방법으로 사용
- 쿠키는 서버가 아닌 클라이언트 컴퓨터 하드디스크에 사용자 정보를 저장한다.
- 서버가 쿠키를 클라이언트에 저장해 두면 쿠키에 대한 정보를 필요로 하는 웹 페이지가 웹 서버에 요청될 때 저장해 놓은 쿠키에 대한 정보를 웹 서버에 다시 건내준다. 쿠키는 사용자 측에 대한 정보를 보관해두었다가 웹 서버의 요청에 의해 정보를 원하는 순간 사용할 수 있도록 하는 것이다.
장 단점
- 클아이언트의 일정 폴더에 정보를 저장하기 때문에 서버의 부하를 줄일 수 있다는 장점이 있다.
- 단점으로는 보안에 결점이 있다 이유는 사용하고자 하는 정보를 기록하면 고스란히 사용자의 컴퓨터에 남기 때문에 악성 유저가 이를 악용할 수 있기 때문이다.
- 데이터를 저장이 1.2MB로 한계가 있다.
1-2. 쿠키의 사용 방법
! 쿠키의 정보를 클라이언트에 저장하는 방법
(1) 쿠키 객체를 생성한다.
Cookie cookie = new Cookie("name", "홍길동");
(2) 쿠키에 속성 값을 설정해준다.(속성 값 메서드는 다양함)
쿠키 정보가 1년 동안 유효할 수 있도록 이미 생성된 쿠키 객체의 유효기간을 설정한다.
cookie.setMaxAge(365*24*60*60);
(3) response 객체의 addCookie()메소드를 이용하여 쿠키를 추가한다.
response.addCookie(cookie);
! 서버가 클라이언트로부터 쿠키의 정보를 얻어오는 방법
(1) 쿠키 객체를 얻어온다.
- request 객체의 getCookies() 메소드를 이용하면 클라이언트의 설정된 모든 쿠키 객체들을 얻어올 수 있다. 쿠키가 여러개 라면 배열형태로 가져옴
Cookie[] cookies = request.getCookies();
(2) 쿠키 객체에 설정된 값을 알아낸다.
- 쿠키의 이름과 값을 알아내기위해 getName()과 getValue()를 사용한다. (스크립트릿 생략)
for(Cookie cookie : cookies) {
out.println(cookie.getName() + " : "+ cookie.getValue() + "<br>");
}
! 쿠키 삭제하기
- 쿠키를 더이상 사용하지 못하게 하려면 쿠키의 유효기간을 만료시켜야 한다.
유효기간을 결정하는 메소드 setMaxAge()에 유효기간을 0으로 설정하면된다.
ex) id 쿠키 값 삭제하기
Cookie cookie = new Cookie("id", "");
cookie.setMaxAge(0);
response.addCookie(cookie);
1. 쿠키 생성
<% Cookie cookie = new Cookie("cookieName","cookieVel");
cookie.setMaxAge(60*60); // 유효기간 설정 (초)
cookie.setSecure(true); // 쿠키를 SSL 이용할때만 전송하도록
cookie.setHttpOnly(true); // https 일때(보안)
response.addCookie(cookie);
%>
2. 쿠키 가져오기
<%
Cookie[] cookies = request.getCookies(); //생성된 쿠키를 가져온다.
for(int i= 0; i<cookies.length;i++){
out.println("cook["+i+"] name="+cookies[i].getName()+"<br/>");
out.println("cook["+i+"] val="+cookies[i].getValue()+"<br/>");
}
%>
3. 쿠키 삭제
<%
Cookie[] cookies = request.getCookies();
for (int i = 0; i < cookies.length; i++) {
if (cookies[i].getName().equals("cookieName")) {
cookies[i].setMaxAge(0); // 유효시간을 0으로 설정함으로써 쿠키를 삭제 시킨다.
response.addCookie(cookies[i]);
}
}
%>
2. 세션(Session)
2-1. 정의
세션은 JSP(서버)에서만 접근 가능하므로 보안 유지에 좋고, 저장 할 수 있는 데이터가 한계가 없다.
세션은 서버 상에 존재하는 객체로써 브라우저 단위 당 한 개씩 존재하고, 웹 브라우저를 닫기 전까지 페이지를 이동하더라도 사용자의 정보를 잃지 않고 서버에 보관할 수 있다.(대표적 예 : 로그인)
2-2. 세션의 사용 방법
1. 상태 유지를 위해서 세션에 값을 저장하는 방법 (setAttribute()를 이용)
session.setAttribute(String name, Object value);
ex)
session.setAttribute("id", "hong");
2. 저장된 값을 가져오는 방법 (getAttribute() 를 이용한다)
Object getAttribute(String name);
String id = (String)session.getAttribute("id");
3. 여러개의 세션 데이터를 가져오기 위한 방법 (Enumeration)
- Enumeration 형을 이용하여 여러 개의 데이터를 집합처럼 관리하는 인터페이스이다.
여러데이터를 뽑아 오기 위해 hasMoreElements()와 nextElement() 메소드를 이용하면 된다.
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>");
}
4. 서블릿에서 세션 저장하기
HttpSession session = request.getSession();
session.setAttribute("name","hong");
5. 세션 관련 메소드
메서드 |
설명 |
getID() |
세션의 고유 ID 반환 |
getCreationTime() |
세션이 만들어진 시간을 반환한다. 웹 브라우저를 띄울 때마다 세션이 생성되므로 그 시간을 알려줌. |
getLastAccessedTime() |
새롭게 웹 브라우저를 띄우지 않고 이미 띄운 웹 브라우저에서 다른 페이지로 이동했다가 돌아오는 경우 사이트를 떠날 당시의 시간을 얻고 싶을 때 사용. 즉, 세션에 클라이언트가 마지막으로 request를 보낸 시간 반환 |
isNew() |
해당 세션이 처음 생성되엇으면 true값을 반환하고 이전에 생성된 세션이라면 false를 반환 |
getMaxInactiveInterval() |
세션의 유효시간을 얻는다. |
setMaxInactiveInterval() |
임의로 세션의 유효시간을 변경할 수 있다. (초 단위로 변경) 무한대로 지정하고 싶을 경우 매개변수에 -1을 지정한다. |
웹 서버를 톰캣으로 사용하는 경우 아파치 톰캣의 경로 에서 conf 디렉토리의 web.xml에 가면 지정할 수 있다.
시간은 분 단위 이다.
<session-config>
<session-timeout>30</session-timeout> <!-- 30분-->
</session-config>
6. 세션 제거하기
removeAttribute() 메소드를 이용하면된다.
session.removeAttribute(String args);
session.removeAttribute("id");
! 모든 세션 제거하는 방법
session.invalidate();
출처: http://clairdelunes.tistory.com/28 [거꾸로 바라본 세상]
댓글 ( 4)
댓글 남기기