[JSP] 쿠키

JHJeong·2024년 5월 7일
0

JSP

목록 보기
4/5
post-custom-banner

1. 쿠키(cookie)

-> 웹 브라우저가 보관하는 데이터
웹 브라우저는 웹 서버에 요청을 보낼 때 쿠키를 함께 전송하며, 웹 서버는 웹 브라우저가 전송한 쿠키를 사용해서 필요한 데이터를 읽을 수 있다. 쿠키는 웹 서버와 웹 브라우저 양쪽에서 생성할 수 있는데, JSP에서 생성하는 쿠키는 웹 서버에서 생성하는 쿠키이다. 쿠키의 동작 방식은 아래와 같다.

(1) 쿠키 생성

  • JSP 프로그래밍에서 쿠키는 웹 서버측에서 생성한다. 생성한 쿠키를 응답 데이터의 헤더에 저장해서 웹 브라우저로 전송한다.

(2) 쿠키 저장

  • 웹 브라우저는 웹 서버에서 보내온 쿠키를 쿠키 보관서에 저장한다. 쿠키는 종류에 따라서 메모리나 파일에 저장하게 된다.

(3) 쿠키 전송

  • 웹 브라우저는 저장한 쿠키를 요청이 있을 때마다 웹 서버에 전송한다. 웹 서버는 웹 브라우저가 전송한 쿠키를 사용해서 필요한 작업을 수행한다.

2. 쿠키의 구성

  • 쿠키를 구성하는 요소는 이름, 값, 유효시간, 도메인, 경로 등이 있다.
    -> 여기서 주요 핵심 요소는 이름과 값이다. 하나의 웹 브라우저는 여러 개의 쿠키를 가질 수 있는데, 이 때 각 쿠키를 구분하기 위해서 사용되는 것이 이름이다.
  • 쿠키 이름은 콤마, 세미콜론, 공백, 등호기호(=)를 제외한 출력 가능한 아스키 문자로 구성된다.

3. 쿠키 생성하기

<%
// 쿠키 생성
Cookie userCookie = new Cookie("user_id", "12345");
// 쿠키 속성 설정
userCookie.setMaxAge(86400); // 24시간 동안 유효
userCookie.setSecure(true);
userCookie.setHttpOnly(true);
userCookie.setPath("/");
// 쿠키를 HTTP 응답에 추가
response.addCookie(userCookie);
%>
  • 위 소스 코드는 사용자 ID를 저당하는 쿠키를 생성하고, 이를 보안 쿠키로 설정한 후, 응답에 추가하는 과정을 보여준다. 이 쿠키는 24시간 동안 유효하며, HTTPS를 통해서만 전송되고, JavaScript를 통한 접근이 차단된다.

4. 쿠키 값 읽어오기

  • 웹 브라우저는 요청 헤더에 쿠키를 저장해서 보내며, JSP는 아래와 같은 소스 코드를 사용해서 쿠키 값을 읽어올 수 있다.
Cookie[] cookies = request.getCookies();

request.getCookies() 메서드는 Cookie 배열을 리턴한다. 이 메서드는 읽어올 쿠키가 존재하지 않으면 null을 리턴한다. null 여부를 확인하지 않고 쿠키를 사용하면 NullPointerException이 발생하므로, 항상 null 여부를 확인하자.

5. 쿠키 값 변경 및 쿠키 삭제하기

  • 쿠키 값 변경은 같은 이름의 쿠키를 새로 생성해서 응답 데이터로 보내면 된다.
  • 쿠키를 삭제하려면 setMaxAge() 메서드를 호출할 때 매개변수를 0으로 지정하면 된다.

6. 쿠키의 도메인

  • 기본적으로 쿠키는 그 쿠키를 생성한 서버에만 전송된다.
  • 예를 들어 https://mail.naver.com 에 연결해서 생성된 쿠키는 다른 사이트(https://map.naver.com)로 연결할 때에는 전송되지 않으며 https://mail.naver.com에 연결할 때에만 전송되게 된다.
  • 하지만 같은 도메인을 사용하는 모든 서버에 쿠키를 보내야할 때가 있을 수 있는데, 이때는 setDomain() 메소드를 사용하여 전송한다. 이 때 주의할 점은 현재 도메인 및 상위 도메인에만 전달할 수 있는 것이다.
<%@ page contentType="text/html; charset=utf-8" %>
<%@ page import = "java.net/URLEncoder" %>
<%
	Cookie cookie1 = new Cookie("id","modvirus");
    cookie1.setDomain(".somehost.com");
    response.addCookie(cookie1);
    
    Cookie cookie2 = new Cookie("only","onlycookie");
    response.addCookie(cookie2);
    
    Cookie cookie3 = new Cookie("invalid","invalidcookie");
    cookie3.setDomain("javacan.tistory.com");
    response.addCookie(cookie3);
%>
<html>
<head><title> 쿠키 생성 </title></head>
<body>
다음과 같이 쿠키를 생성했습니다.〈br〉
<%= cookiel.getName() %>=<%= cookiel.getValue() %>
[<%= cookie1.getDomain() %>]
<br>
<%= cookie2.getName() %>=<%= cookie2.getValue() %>
[<%= cookie2.getDomain() %>]
<br>
<%= cookie3.getName() %>=<%= cookie3.getValue() %>
[<%= cookie3.getDomain() %>]
</body>
</html>

7. 쿠키의 경로

  • 도메인이 쿠키를 공유할 도메인 범위를 지정한다면, 경로는 쿠키를 공유할 기준 경로를 지정한다.
  • 쿠키의 경로를 지정할 때에는 Cookie 클래스의 setPath() 메서드를 사용한
    다.
Cookie cookie = new Cookie("name","value");
cookie.setPath("/chap09");
  • 위 소스 코드는 쿠키 경로를 "/chap09"로 지정한다. 이 경우 웹브라우저는 name 쿠키를 /chap09 또는 그 하위 경로에만 전송한다.

8. 쿠키의 유효시간

  • 쿠키는 유효시간이 있는데, 따로 지정해주지 않으면 웹 브라우저 종료시에 삭제된다.
  • 쿠키의 유효시간을 설정해 놓으면 웹 브라우저를 종료했어도 쿠키가 삭제되지 않는다.
  • 유효시간은 setMaxAge() 메소드를 통해서 설정한다.

9. 쿠키와 헤더

  • response.addCookie()로 쿠키를 추가하면 실제로 Set-Cookie 헤더를 통해서 전달된다. 한 개의 Set-Cookie 헤더는 한 개의 쿠키 값을 전달한다.
  • 한 개의 Set-Cookie 헤더 구성은 다음과 같다.

    쿠키이름=쿠키값; Domain=도메인값; Path=경로값; Expires=GMT형식의 만료일시

10. 쿠키를 사용한 로그인 상태 유지

  • 쿠키를 사용하면 다음과 같은 방법으로 로그인 상태를 유지할 수 있다.
    (1) 로그인에 성공하면 특정 이름을 갖는 쿠키를 생성한다.
    (2) 해당 쿠키가 존재하면 로그인한 상태라고 판단한다.
    (3) 로그아웃 하면 해당 쿠키를 삭제한다.

    예를 들어, 로그인에 성공하면 "AUTH"라는 쿠키를 생성하고, "AUTH" 쿠키가 존재하면 로그인한 상태라고 인식하는 것이다.

profile
이것저것하고 싶은 개발자
post-custom-banner

0개의 댓글