* 본 글은 [뉴렉처]의 Servlet&JSP 프로그래밍 강의를 듣고 정리한 글입니다.
2020 Servlet&JSP 프로그래밍
www.youtube.com
Cookie의 maxAge 옵션: 브라우저와 상관없이 설정한 기간 동안 쿠키 유지
쿠키는 브라우저가 닫혀도 유효할까?
- 쿠키에 maxAge 옵션을 설정하지 않으면 브라우저의 생존주기와 같아짐
- 브라우저가 메모리 상에 쿠키를 갖고 있다가 브라우저가 닫히면 쿠키가 사라진다는 의미
- But, maxAge 옵션으로 원하는 기간을 설정하면 브라우저가 닫히고 클라이언트의 컴퓨터가 꺼져도 그 기간 내에는 쿠키를 계속 유지하고, 요청이 오면 쿠키 영구 저장소에서 쿠키를 읽어옴
브라우저가 쿠키를 저장하는 공간
- 쿠키는 기본적으로 브라우저의 메모리에 존재
- maxAge 옵션으로 기간을 설정하면 쿠키는 영구 저장소라고 할 수 있는 외부 파일에 저장됨
- 브라우저와 상관없이 그 기간 동안은 존재해야 하니까
- 해당 파일 경로로 접속하면 쿠키를 찾아볼 수 있음
- Internet Explorer의 쿠키 영구 저장소 경로
maxAge 옵션 설정하기
- Browser에 쿠키를 전달한 시간부터 만료시간까지 쿠키를 외부 파일에 저장해 그 기간 동안 브라우저와 상관없이 쿠키 사용 가능
- 형태
- 쿠키객체명.setMaxAge(만료날짜);
- 만료 날짜는 초 단위로 설정되어 있음
- 예시
- valueCookie.setMaxAge(60*60); > 60분 동안 쿠키 존재
- valueCookie.setMaxAge(246060); > 24시간(하루) 동안 쿠키 존재
maxAge 옵션 설정하기 예시
Cookie valueCookie = new Cookie("value", String.valueOf(v));
Cookie opCookie = new Cookie("op", op);
valueCookie.setPath("/calc2");
valueCookie.setMaxAge(24*60*60);
opCookie.setPath("/calc2");
response.addCookie(valueCookie);
response.addCookie(opCookie);
- value에만 maxAge 옵션 설정: 하루 동안 쿠키 유지하기
- op에는 maxAge 옵션 설정하지 않음
- 결과
- 브라우저를 껐다 켜면, value의 쿠키만 남아있고 SID와 op의 쿠키는 제거됨
maxAge 옵션을 설정한 Cookie 사용하는 서블릿과 HTML
- Calc2.java
package com.newlecture.web;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/calc2")
public class Calc2 extends HttpServlet {
@Override
protected void service(HttpServletRequest request
, HttpServletResponse response)
throws ServletException, IOException
{
ServletContext application = request.getServletContext();
HttpSession session = request.getSession();
Cookie[] cookies = request.getCookies();
//response의 인코딩 방식 지정
response.setContentType("text/html; charset=UTF-8");
response.setCharacterEncoding("UTF-8");
PrintWriter out = response.getWriter();
String v_ = request.getParameter("v");
String op = request.getParameter("operator");
//기본값 처리
int v = 0;
if(!v_.equals("")) {v = Integer.parseInt(v_);}
//값을 계산
if(op.equals("=")) {
// int x = (Integer)application.getAttribute("value");
int x = 0;
for(Cookie c : cookies) {
if(c.getName().equals("value")) {
x = Integer.parseInt(c.getValue());
break;
}
}
int y = v;
// String operator = (String)application.getAttribute("op");
String operator = "";
for(Cookie c : cookies) {
if(c.getName().equals("op")) {
operator = c.getValue();
break;
}
}
int result = 0;
if(operator.equals("+")) {
result = x + y;
} else {
result = x - y;
}
response.getWriter().printf("계산 결과는 %d\\n", result);
}
//값을 저장
else {
// application.setAttribute("value", v);
// application.setAttribute("op", op);
// session.setAttribute("value", v);
// session.setAttribute("op", op);
Cookie valueCookie = new Cookie("value", String.valueOf(v));
Cookie opCookie = new Cookie("op", op);
valueCookie.setPath("/calc2");
valueCookie.setMaxAge(24*60*60);
opCookie.setPath("/calc2");
response.addCookie(valueCookie);
response.addCookie(opCookie);
}
}
}
- calc2.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>계산기 웹 프로그램</title>
</head>
<body>
<form action="calc2" method="post">
<div>
<p>계산할 값을 입력하세요.</p>
</div>
<div>
<label>입력 : </label>
<input type="text" name="v"/>
</div>
<div>
<input type="submit" name="operator" value="+">
<input type="submit" name="operator" value="-">
<input type="submit" name="operator" value="=">
</div>
</form>
</body>
</html>
'☕ Java 웹 프로그래밍 > Servlet & JSP' 카테고리의 다른 글
[Servlet&JSP] 서버에서 페이지 전환하기(redirection) (0) | 2023.06.02 |
---|---|
[Servlet&JSP] Application, Session, Cookie 정리 (0) | 2023.06.01 |
[Servlet&JSP] Cookie의 path 옵션: 해당 path 요청일 때만 쿠키 읽기 (0) | 2023.06.01 |
[Servlet&JSP] Cookie로 상태 값 유지하기 (0) | 2023.06.01 |
[Servlet&JSP] Session 객체로 상태 값 저장하기 (+ Application 객체와의 차이점) (0) | 2023.06.01 |