JSP

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 [거꾸로 바라본 세상]

 

 

 

 

 

about author

PHRASE

Level 60  머나먼나라

우리가 세운 목적이 그른 것이라면 언제든지 실패할 것이요, 우리가 세운 목적이 옳은 것이면 언제든지 성공할 것이다. -안창호

댓글 ( 4)

댓글 남기기

작성