쿠키(Cookie) 사용법??

JAVA / / 2021. 12. 12. 12:33

1.쿠키란
웹브라우저 - > 파라미터 - > 웹서버  정보전달
웹서버 -> 쿠키 -> 웹브라우저 정보전달

2. 쿠키의구성
쿠키는 이름 + 값 
이름 - >여러개의 쿠키가 있으면 이름으로 구분한다.
값 ->서버는 이 값을 사용해서 작업을 수행한다

3. 쿠키의 제한
쿠키의 이름은 알파벳과 숫자로 이루어져 있고 콤마 세미콜론은 안된다.

4. 쿠키의 생성

Cookie cookie = new Cookie("cookiename","cookievalue");
response.addCookie("cookie");

위 코드처럼 작성하면 쿠키가 생성된다.

5. 쿠키의 변경
이름이 name 인 쿠키의 값을 변경하기위해서는 

Cookie cookie = new Cookie("name", URLEncode.encode("새로운값","euc-kr"));
response.addCookie(cookie);

 

사실 이렇게 해버리면 쿠키가 없는 에는 그냥 생성해버리므로 실제쓸때는 조건문이 조금 들어가야한다

Cookie[] cookies = request.getCookies(); //쿠키를 배열로 읽어들이고
if(cookies != null && cookies.length >0){
  for(i=0; i<cookies.length; i++){
    if((cookies[i].getName().equals("name")){  //name에는 변경할 쿠키이름
    	Cookie cookie = new Cookie("name", URLEncode.encode("새로운값","euc-kr"));
    }
  }
}


이런식으로 바꾼다. 

6. 쿠키의 삭제

쿠키의 삭제는 위에랑 똑같다

Cookie[] cookies = request.getCookies(); //쿠키를 배열로 읽어들이고
if(cookies != null && cookies.length >0){
  for(i=0; i<cookies.length; i++){
    if((cookies[i].getName().equals("name")){  //name에는 변경할 쿠키이름
    	cookie[i].setMaxAge(0); // 해버리면 삭제된다
    }
  }
}


7. 쿠키를 편하게 쓰도록 클래스 파일하나만 만들어보자

package util;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.Cookie;
import java.util.Map;
import java.net.URLEncoder;
import java.net.URLDecoder;
import java.io.IOException;

public class CookieUil {
    // 쿠키를 <쿠키이름, cookie 객체> 쌍으로 저장하는 맵
    private Map cookieMap = new java.util.HashMap();
        
    /*
     * 생성자
     * cookie배열을 cookieMap에 저장한다.
     * @param request
     */
    public CookieUil(HttpServletRequest request) {
        Cookie[] cookies = request.getCookies();
        if (cookies != null) {
            for (int i = 0 ; i < cookies.length ; i++) {
                cookieMap.put(cookies[i].getName(), cookies[i]);
            }
        }
    }
        
    /*
     * 쿠키객체를 생성해서 리턴
     * @param name
     * @param value
     * @return cookie
     * @throws IOException
     */
    public static Cookie createCookie(String name, String value)
    throws IOException {
        return new Cookie(name, URLEncoder.encode(value, "utf-8"));
    }
     
    /*
     * 쿠키객체를 생성해서 리턴 
     * @param name
     * @param value
     * @param path
     * @param maxAge
     * @return cookie
     * @throws IOException
     */
    public static Cookie createCookie(String name, String value, String path, int maxAge) 
        throws IOException {
            Cookie cookie = new Cookie(name, URLEncoder.encode(value, "utf-8"));
            cookie.setPath(path);
            cookie.setMaxAge(maxAge);
            return cookie;
        }
        
    /*
     * 쿠키객체를 생성해서 리턴
     * @param name
     * @param value
     * @param domain
     * @param path
     * @param maxAge
     * @return cookie
     * @throws IOException
     */
    public static Cookie createCookie(String name, String value, String domain, String path, int maxAge)
        throws IOException {
            Cookie cookie = new Cookie(name, URLEncoder.encode(value, "utf-8"));
            cookie.setDomain(domain);
            cookie.setPath(path);
            cookie.setMaxAge(maxAge);
            return cookie;
        }
        
    /*
     * 쿠키를 가져온다
     * @param name
     * @return cookie
     */
    public Cookie getCookie(String name) {
        return (Cookie)cookieMap.get(name); 
    }
        
    /*
     * 쿠키의 값을 가져온다 
     * @param name
     * @return value
     * @throws IOException
     */
    public String getValue(String name) throws IOException {
        Cookie cookie = (Cookie)cookieMap.get(name);
        if (cookie == null) return null;
        return URLDecoder.decode(cookie.getValue(), "utf-8");
    }
        
    /*
     * 쿠키 삭제
     * @param cookieKey
     * @return
     */
    public Cookie deleteCookie(String cookieKey){
        Cookie cookie = null;
        if(isExist(cookieKey)){
            cookie = getCookie(cookieKey);
            // 쿠키생성시에 setPath()가 설정되어 있으면 삭제시에도 해당 패스를 다시 삭제하기위해서 생성된
            // 쿠키에 재설정하고 setMaxAge(0)으로 설정하며 삭제합니다.
            if(cookie.getPath() != null){
                cookie.setPath(cookie.getPath());
            }else{
                cookie.setPath("/");
            }
            if(cookie.getDomain() != null){
                cookie.setDomain(cookie.getDomain());
            }
            cookie.setMaxAge(0);
        }
        return cookie;
    }

    /*
     * 쿠키 존재 여부
     * @param name
     * @return 존재 : true, 미존재 : false
     */
    public boolean isExist(String name) {
        return cookieMap.get(name) != null;
    }
}


8. 다음은 쿠키를 관리하는 유틸의 사용법이다.

// CookieUtil 클래스의 생성자는 request로부터 쿠키 정보를 추출
CookieUtil cookieUtil = new CookieUtil(request);
 
// 쿠키가 존재하지 않으면 null 리턴
Cookie idCookie = cookieUtil.getCookie("id"); 

// 지정한 이름의 쿠키가 존재하는지의 여부
if (cookieUtil.exists("name")) {
     ...
}
 
// 지정한 이름의 쿠키가 존재하지 않으면 값으로 null 리턴
String value = cookieUtil.getValue("ROLE");

* 쿠키 생성

-> createCookie 함수를 사용하여 각각에 맞는 쿠키를 생성

생성 후 리턴받은 cookie를 response.addCookie(cookie); 해주는 것은 잊지 말자! (클라이언트에게 전송)

 

* 쿠키 삭제

-> deleteCookie 함수를 사용해서 삭제

cookie가 없다면 리턴값은 null 이고

cookie를 리턴받았으면 response.addCookie(cookie); 해주는 것도 잊지 말자! (클라이언트에게 전송)

* jsp 에서 쿠키 유틸 사용법  

<%@page import = " util.CookieUtil %>
Cookie cookie = response.addCookie(CookieUtil.createCookie("이름","값","path",60));


변수값은 이름 , 값, path , 시간을 지정하였다.

* jsp 에서 쿠키 유틸 읽기 방법

<%@ page contentType = "text/html; charset=euc-kr" %>
<%@ page import = "util.CookieUtil" %>
<%
 CookieUtil cookieUtil = new CookieUtil(request);
%>
<html>
<head><title>Cookie 사용</title></head>
<body>

name 쿠키 = <%= cookieUtil.getValue("name") %> <br>
<%  if (cookieUtil.exists("id")) { %>
id 쿠키 = <%= cookieUtil.getValue("id") %> <br>
<%  }  %>
</body>
</html>

 

반응형

'JAVA' 카테고리의 다른 글

[Java] 자바 버전 확인 하는법  (0) 2021.12.13
쿠키(Cookie)의 생성, 응용편  (0) 2021.12.12
Java Cookie 사용하기  (0) 2021.12.11
Java(자바) 형변환 하기  (0) 2021.12.10
Java 와 JavaEE의 차이점  (0) 2021.12.10
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기