티스토리 뷰
쿠키(Cookie)
- 쿠키(Cookie)란 웹 페이지들 사이의 공유 정보를 클라이언트 PC에 저장해 놓고 필요할 때 여러 웹 페이지들이 공유해서 사용할 수 있도록 매개 역할을 하는 방법이다.
쿠키의 특징
- 정보가 클라이언트 PC에 저장된다.
- 저장 정보 용량에 제한이 있다( 파일 용량은 4kb)
- 보안이 취약하다.
- 클라이언트 브라우저에서 사용 유무를 설정할 수 있다.
- 도메인당 쿠키가 만들어진다( 웹 사이트당 하나의 쿠키 생성 ).
- 쿠키는 클라이언트 PC에 정보를 저장해서 사용하므로 보안에 취약하다. 따라서 쿠키를 이용한 방법은 주로 보안과
무관한 경우에 한해 사용한다. ( 팝업창 표시 여부 등)
쿠키의 종류
속성 | Persistence 쿠키 | Session 쿠키 |
생성 위치 | 파일로 생성 | 브라우저 메모리에 생성 |
종료 시기 | 쿠키를 삭제하거나 쿠키 설정 값이 종료된 경우 | 브라우저를 종료한 경우 |
최초 접속 시 전송 여부 | 최초 접속 시 서버로 전송 | 최초 접속 시 서버로 전송되지 않음 |
용도 | 로그인 유무 또는 팝업창 제한 | 사이트 접속 시 Session 인증 정보 유지 |
- Persistence 쿠키는 클라이언트에 파일로 정보를 저장하는 기능을 한다.
- 파일로 생성된 쿠키는 사용자가 만료 시간을 지정할 수 있는 반면에 Session 쿠키는 브라우저가 사용하는 메모리에
생성되는 쿠키다.
- 브라우저가 종료되면 메모리의 Session 쿠키도 자동으로 소멸된다.
- 쿠키 생성 위치(크롬)
C:\Users\user\AppData\Local\Google\Chrome\User Data\Default\Cache
=> 크롬에서 사용하는 쿠키 파일
쿠키 기능 실행 과정
- 브라우저에서 웹사이트에 최초 접속하면 웹 서버에서 쿠키를 생성해 클라이언트로 전송
- 브라우저는 쿠키를 파일로 저장
- 이후 다시 접속해 서버가 브라우저에게 쿠키 전송을 요청하면 브라우저는 쿠키 정보를 서버에 전송
- 서버는 쿠키 정보를 이용해 작업
쿠키 API
- 쿠키는 Cookie 클래스 객체를 생성하여 정보를 저장한 후 서버에서 클라이언트로 전송해 파일로 저장된다.
- 쿠키 관련 API의 특징은 다음과 같다.
- javax.servlet.http.Cookie를 이용한다.
- HttpServletResponse의 addCookie() 메서드를 이용해 클라이언트 브라우저에 쿠키를 전송한 후 저장한다.
- HttpServletRequest의 getCookie() 메서드를 이용해 쿠키를 서버로 가져온다.
쿠키 클래스 메서드
메서드 | 설명 |
getComment() | 쿠키에 대한 설명을 가져온다. |
getDomain() | 쿠키의 유효한 도메인 정보를 가져온다. |
getMaxAge() | 쿠키 유효 기간을 가져온다. |
getName() | 쿠키 이름을 가져온다. |
getPath() | 쿠키의 디렉터리 정보를 가져온다. |
getValue() | 쿠키의 설정 값을 가져온다. |
setComment(String) | 쿠키에 대한 설명을 설정한다. |
setDomain(String) | 쿠키의 유효한 도메인을 설정한다. |
setMaxAge(int) | 쿠키 유효 기간을 설정한다. |
setValue(String) | 쿠키 값을 설정한다. |
- 쿠키 생성 시 setMaxAge() 메서드 인자 값의 종류를 지정해서 파일에 저장하는 Persistence 쿠키를 만들거나 메모리에만 저장하는 Session 쿠키를 만들 수 있다.
- 즉, setMaxAge() 메서드를 이용한 쿠키저장 방식은 다음 두 가지로 나눌 수 있다.
- 인자 값으로 음수나 setMaxAge() 메서드를 사용하지 않고 쿠키를 만들면 Session 쿠키로 저장된다.
- 인자 값으로 양수를 지정하면 Persistence 쿠키로 저장된다.
쿠키 사용
- 서블릿에서 쿠키 API를 이용해 쿠키를 만들어본다.
- Cookie객체를 생성한 후 쿠키 이름을 cookieTest로 저장한다.
- setMaxAge() 메서드를 이용해 쿠키 유효 시간을 24시간으로 설정한다.
- response.addCookie() 메서드를 이용해 생성된 쿠키를 브라우저로 전송한다.
* SetCookieValue.java
package servlet;
import java.io.IOException;
import java.io.PrintWriter;
import java.net.URLEncoder;
import java.util.Date;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class SetCookieValue
*/
@WebServlet("/set")
public class SetCookieValue extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
Date d = new Date();
// Cookie 객체를 생성한 후 cookieTest 이름으로 한글 정보를 인코딩해서 쿠키에 저장한다.
Cookie c = new Cookie("cookieTest",URLEncoder.encode("JSP 프로그래밍입니다.","utf-8"));
c.setMaxAge(24*60*60); // 유효 기간을 설정
response.addCookie(c); // 생성된 쿠키를 브라우저로 전송
out.print("현재시간 : " + d);
out.print("현재시간을 Cookie로 저장합니다.");
}
}
* GetCookieValue.java
package servlet;
import java.io.IOException;
import java.io.PrintWriter;
import java.net.URLDecoder;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class GetCookieValue
*/
@WebServlet("/get")
public class GetCookieValue extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
// request의 getCookies() 메서드를 이용해 브라우저에게 쿠키 정보를 요청한 후 쿠키 정보를 배열로 가져온다.
Cookie[] allValues = request.getCookies();
// 배열에 저장할 때 사용한 쿠키 이름인 cookieTest로 검색해 쿠키 값을 가져온다.
for(int i = 0 ; i < allValues.length; i++) {
if(allValues[i].getName().equals("cookieTest")) {
out.print("<h2>Cookie 값 가져오기 : " + URLDecoder.decode(allValues[i].getValue(),"utf-8"));
}
}
}
}
- 코드 작성 후 톰캣을 재시작하고 브라우저에 localhost:[port]/[project_name]/set 을 입력한다.
- 설정 후 /get 주소로 접속해 본다.
세션 쿠키
- 이번 예제는 쿠키를 파일에 저장하는 것이 아닌, 브라우저가 사용하는 메모리에 저장하는 Session 쿠키를 만든다.
- Cookie의 setMaxAge() 메서드를 이용해 유효시간을 -1로 설정하면 세션 쿠키가 생성된다.
* SetCookieValue.java
package servlet;
import java.io.IOException;
import java.io.PrintWriter;
import java.net.URLEncoder;
import java.util.Date;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class SetCookieValue
*/
@WebServlet("/set")
public class SetCookieValue extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
Date d = new Date();
// Cookie 객체를 생성한 후 cookieTest 이름으로 한글 정보를 인코딩해서 쿠키에 저장한다.
Cookie c = new Cookie("cookieTest",URLEncoder.encode("JSP 프로그래밍입니다.","utf-8"));
c.setMaxAge(-1); // 유효 시간을 음수로 지정하여 Session 쿠키를 만든다.
response.addCookie(c); // 생성된 쿠키를 브라우저로 전송
out.print("현재시간 : " + d);
out.print("현재시간을 Cookie로 저장합니다.");
}
}
'Servlet' 카테고리의 다른 글
서블릿 - 세션 로그인 예제 (0) | 2024.08.12 |
---|---|
세션 트래킹 - 세션 (0) | 2024.08.12 |
세션 트래킹 (0) | 2024.08.12 |
서블릿 컨텍스트(ServletContext) (0) | 2024.08.12 |
서블릿 - 바인딩 (1) | 2024.08.12 |
- Total
- Today
- Yesterday
- 네트워크
- Servlet
- JSP
- react
- nodejs
- a 태그
- Java Server Page
- httpServletRequest
- HTML
- FMT
- 미들웨어
- CSS
- 스프링
- el
- 제이쿼리
- 세션
- 서브넷팅
- Binding
- javaserverpage
- 리액트
- Session
- 내장객체
- Spring
- Network
- html css
- script element
- CSS 속성
- 서블릿
- Spring MVC
- Redux
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |