Development/Spring

Spring 쿠키 생성 삭제

우봉수 2023. 2. 2. 15:56

쿠키

정의: 이름과 값의 쌍으로 구성된 작은 정보. 아스키 문자만 가능

서버에서 생성 후 전송, 브라우저에 저장, 유효기간 이후 자동 삭제

서버에 요청시 domain, path가 일치하는 경우에 하위경로 포함 자동 전송

  • 한글의 경우 URL인코딩 필요

목적: 클라이언트를 식별하기 위해서 http 프로토콜 보완

 

구성

  • name
  • value
  • Domain
  • path
  • 유효기간

선행 과정

  1. 클라이언트의 요청
  2. 서버가 쿠키 생성
  3. 생성된 쿠키를 해당 프로토콜 해더에 담아서 전달
  4. 브라우저에 해당 쿠키가 저장

후행 과정

  1. 클라이언트의 요청
  2. 만약 기존에 남아있던 쿠키와 일치하는 요청이라면
  3. 자동으로 브라우저에 저장된 쿠키가 함께 요청이 해더에 담겨 전송 됨

쿠키의 생성 (Spring)

Cookie cookie = new Cookie(”name”,”value”); // 쿠키의 생성
cookie.setMaxAge(60*60*24); // 유효기간 설정(초)
response.addCookie(cookie); // 응답에 쿠키 추가

 

쿠키의 삭제와 변경 (Spring)

Cookie cookie = new Cookie(”name”,””); // 변경할 쿠키의 같은 이름의 쿠키 생성
cookie.setMaxAge(0); // 유효기간을 0으로 설정(삭제)
response.addCookie(cookie); // 응답에 쿠키 추가

Cookie cookie = new Cookie(”name”,””); // 변경할 쿠키의 같은 이름의 쿠키 생성
cookie.setValue(URLEncoder.encode("남궁성")); // 값의 변경
cookie.setDomain("www.fastcampus.co.kr"); // 도메인의 변경
cookie.setPath("/ch"); // 경로의 변경
cookie.setMaxAge(60*60*24*7); // 유효기간의 변경
response.addCookie(cookie); //응답에 쿠키 추가

 

쿠키 읽어 오기

// 쿠키가 없으면 NULL 즉 NULL체크 필요
Cookie[] cookies = request.getCookies(); // 쿠키 읽기

for(Cookie cookie: cookies{
    String name = cookie.getName();
    String value = cookie.getValue();

    System.out.printf("[cookie]name=%s,value=%s%n",name,value);
}

 

쿠키를 활용하여 로그인 정보 남게 하기

<HTML>

  • EL을 활용하여 value = ${cookie.id.value} 사용
  • 쿠키가 있으면 체크 없으면 no체크 ${empty cookie.id.value ? "":"checked”}

직접 브라우저에서 쿠키 생성

빈칸을 더블클릭 후 원하는 이름과 값을 적어 놓으면 생성 완료

 

Spring 코드로 생성

public String login(String id,String pwd,boolean rememberId, HttpServletResponse response){
    // 아이디를 기억하기를 원하면
        if(rememberId) {
            //    1. 쿠키를 생성
            Cookie cookie = new Cookie("id",id); 
            //    2. 응답에 저장
            response.addCookie(cookie);
        }
        // 그렇지 않으면
        else {
            Cookie cookie = new Cookie("id","");
            cookie.setMaxAge(0); // 쿠키를 삭제
            response.addCookie(cookie);
        }
        //    3. 홈으로 이동
        return "home";
    }