거꾸로 바라본 세상
Published 2016. 4. 6. 16:36
[JSP] 쿠키와 세션 Front-End/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);


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();






반응형

'Front-End > JSP' 카테고리의 다른 글

MVC2패턴으로 구현한 jsp & servlet 게시판  (0) 2016.04.26
[JSP] JSTL  (0) 2016.04.07
profile

거꾸로 바라본 세상

@란지에。

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!