티스토리 뷰



1. 쿠키란?

  웹 서버들은 클라이언트와의 연결 상캐를 지속하기 위해서 HTTP 쿠키를 사용한다. 웹 서버에서 클라이언트와 접속을 할때 지속적으로 주고 받게 되는 데이터를 매 연결마다 새로 주고 받는 것은 매우 불편한 일이다. 이런 정보로는 세션 ID, 쇼핑 카트 정보, 로그인 정보 등이 있다. 그래서 해당 정보들을 쿠키에 집어 넣게 된다면 우린 주고 받는 데이터의 양을 대폭 줄일 수 있다. 


  해당 개념은 넷스케이프의 개발자였던 루 몬톨리가 처음 만들어 냈다. 그가 고안한 뒤로 많은 웹 사이트와 브라우저에서 쿠키를 적용하기 시작했다. 웹사이트에서 기억할 필요가 있는 변수를 Cookie 필드에 집어 넣어 해결 할 수 있다. 쿠키 필드는 HTTP의 헤더필드에 적용된다.


  우선 서버에서 클라이언트의 쿠키를 설정하기 위해서 Set-Cookie 헤더를 포함 시킨다.


HTTP/1.1 200 OK

Content-type: text/html

Set-Cookie: ID=EMFOEGEFAEKGA


  여기서 사용하는 쿠키는 ID 필드고 위와 같이 데이터로 저장된다. 위 요청을 받은 클라이언트는 다시 서버로 HTTP 요청을 아래와 같이 보낸다.


GET /index.html HTTP/1.1

Host: www.example.org

Cookie: ID=EMFOEGEFAEKGA

Accept: text/html


  구글 홈페이지 접속시 크롬 개발자 도구를 통해 살펴보면 아래의 쿠키가 설정 되는걸 볼 수 있다.



2. 쿠키 생성 및 특징

  자바에서 역시 쿠키를 쉽게 만들수 있다. 쿠키의 경우 변수 이름과 변수 값으로 구성된다. 구글 쿠키에서 보면 그 구조를 쉽게 알 수 있다.


expires = Tue, 27-Aug-2019 06:23:60 GMT


  이 처럼 쿠키를 만드는 데는 필드 명과 값을 지정해주면 된다. 자바에서 쿠키는 아래 처럼 만들 수 있다.


1
2
3
        String expires = new String("Tue, 27-Aug-2019 06:23:60 GMT");
        
        Cookie cookie = new Cookie("expires",expires);
cs


  쿠키는 아래와 같은 특징을 가지고 있다.


- 유효기간


  쿠키는 정보를 담는 필드 이몰 일정한 정보를 가지고 있어야 한다. 유효기간 내에서는 웹페이지를 읽은 때 쿠키 정보를 읽지만, 이후엔 데이터를 읽지 못하므로 쿠키를 재 설정 해주어야 한다.


  

1
cookie.setMaxAge(60*60*24*365);            // 쿠키 유지 기간 - 1년
cs


- 패스


  쿠키를 만들때, 패스를 지정해 패스 하위에 접속하는 경우 해당 쿠키를 읽게 할 수도 있다.


1
cookie.setPath("/");                               // 모든 경로에서 접근 가능
cs


   이 메소드를 이용해 쿠키를 생성하고 요청해 포함 시킨다.


1
2
3
4
5
Cookie[] cookies = request.getCookies();
        for (int i = 0; i < cookies.length; i++) {
        cookies[i].getName(); 
        cookies[i].getValue();
        }
cs



- 쿠키 저장


  CookieStore 클래스를 사용하면 로컬에서 쿠키를 저장하고, 필요할 때 꺼내서 사용 가능하다. 애플리케이션을 종료하더라도 쿠키가 디스크에 저장되어 있으면 이를 다시 불러와서 사용 가능하다.


1
CookieStore store = manager.getCookieStore();
cs


3. CookieManager 클래스

  자바에서는 쿠키를 제어하기 위해서 CookieManager를 사용해 제어를 한다. CookieManager를 활성화하기 위해서는 우선 CookieHandler를 선언해야 한다.


1
2
        CookieManager manager = new CookieManager();
        CookieHandler.setDefault(manager);
cs



  이렇게 생성한 manager를 통해 쿠키를 제어할 수 있다.


  대표적인 쿠키 제어 방법에는 CookiePolicy가 있다. 쿠키 허용 설정을 위해 Cookie Policy를 사용하는데 다음 세 정책이 기본적으로 세팅 되어 있다.


  • CookiePolicy.ACCEPT_ALL : 모든 쿠키 허용
  • CookiePolicy.ACCEPT_NONE : 모든 쿠키 차단
  • CookiePolicy.ACCEPT_ORIGINAL_SERVER : 서드파티 쿠키 차단


  하지만 보통의 경우는 위 세가지 방법보다 세부적인 방법이 필요하다. 특정 몇몇 사이트에 대해서만 쿠키를 허용하고자 한다면 CookiePolicy 인터페이스를 구현하고, shouldAccept() 메소드를 오버라이드 하면 된다. 다음은 특정 도메인에 대한 쿠키 차단 정책 코드다.



1
2
3
4
5
6
7
8
9
10
11
12
public class UserCookiePolicy implements CookiePolicy {
    @Override
    public boolean shouldAccept(URI uri, HttpCookie cookie) {
        if(uri.getAuthority().toLowerCase().endsWith(".jp")
            || cookie.getDomain().toLowerCase().endsWith(".jp")) {
            return false;
        }
        return true;
    }
    
}
 
cs


(출처 : Java Network Programming - 엘리엇 러스티 해럴드)





'Skill > Programming - Network' 카테고리의 다른 글

16. 서버 소켓  (0) 2019.08.16
15. 클라이언트 소켓  (0) 2019.08.04
13. HTTP 요청  (0) 2019.07.21
12. HTTP 연결  (0) 2019.07.16
11. 프록시 (Proxy)  (0) 2019.07.07
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함