[Java] Cookie
쿠키 - 클라이언트에 저장되어있다가 뭐랬더라?
- 로그인 성공시 쿠키에 저장할 데이터 설정
- 쿠키에 데이터 저장
- 저장된 쿠키가 사이트 접속시 자동으로 같이 감
- 로그인 여부확인을 위해 쿠키를 읽어옴
- 로그아웃하면 쿠키데이터 지움
CookieTest_jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Cookie 연습</title>
</head>
<body>
<a href = "<%=request.getContextPath()%>/cookieAddTest.do">
Cookie 정보 저장하기
</a><br><hr><br>
<a href = "<%=request.getContextPath()%>/cookieReadTest.do">
Cookie 정보 확인하기
</a><br><hr><br>
<a href = "<%=request.getContextPath()%>/cookieDeleteTest.do">
Cookie 정보 삭제하기
</a><br><hr><br>
</a>
</body>
</html>
Cookie 저장법
1.Cookie 객체를 생성한다. 쿠키변수와 쿠키값이 필요하다. 쿠키변수와 쿠키값은 문자열로 지정한다. 쿠키는 문자열밖에 저장을 못하기 때문에.
형식) Cookie cookie변수 = new Cookie('쿠키변수', '쿠키값');
쿠키값으로 한글을 사용할 경우 URLEncoding.encode()메서드로 인코딩 후 저장한다.
2. 쿠키 속성 설정
1) 쿠키변수.setPath("적용경로"); // 지정한 경로와 그 하위 경로에서 사용 가능하다.
생략하면 쿠키를 설정할 당시의 경로가 설정된다.
2) 쿠키변수.setMaxAge(유지시간); 단위(초)
유지시간이 음수 : 브라우저가 종료될 때까지 유지(기본값)
유지시간이 0 : 즉시 쿠키가 삭제된다.
3) 쿠키변수.setDomain("적용도메인명");
예) ".ddit.or.kr" 이면 www.ddit.or.kr이나 www2.ddit.or.kr도됨
쿠키변수.setSecure(보안여부); = > true:적용, false:미적용(기본값) true인 경우 http에서 못씀
3. response객체를 이용하여 쿠키를 웹브라우저로 보내면 웹브라우저가 이 쿠키를 받아서 저장한다.
형식) response객체.addCookie(1번에서 만든 Cookie객체)
package kr.or.ddit.basic.cookie;
import java.io.IOException;
import java.io.PrintWriter;
import java.net.URLEncoder;
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;
@WebServlet("/cookieAddTest.do")
public class CookieAddTest extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("utf-8");
response.setContentType("text/html; charset=utf-8");
PrintWriter out = response.getWriter();
// Cookie 저장법
// 1. Cookie 객체를 생성한다. 쿠키변수와 쿠키값이 필요하다. 쿠키변수와 쿠키값은 문자열로 지정한다. 쿠키는 문자열밖에 저장을 못하기 때문
// 형식) Cookie cookie변수 = new Cookie('쿠키변수', '쿠키값');
// 쿠키값으로 한글을 사용할 경우 URLEncoding.encode()메서드로 인코딩 후 저장한다.
Cookie nameCookie = new Cookie("name", URLEncoder.encode("홍길동", "UTF-8"));
Cookie ageCookie = new Cookie("age", String.valueOf(30)); // 숫자는 문자열로 변환해야한다.
Cookie cityCookie = new Cookie("city", "seoul");
// 2. 쿠키 속성 설정
//1) 쿠키변수.setPath("적용경로"); // 지정한 경로와 그 하위 경로에서 사용 가능하다.
// 생략하면 쿠키를 설정할 당시의 경로가 설정된다.
//2) 쿠키변수.setMaxAge(유지시간); 단위(초)
// 유지시간이 음수 : 브라우저가 종료될 때까지 유지(기본값)
// 유지시간이 0 : 즉시 쿠키가 삭제된다.
//3) 쿠키변수.setDomain("적용도메인명");
// 예) ".ddit.or.kr" 이면 www.ddit.or.kr이나 www2.ddit.or.kr도됨
// 쿠키변수.setSecure(보안여부); = > true:적용, false:미적용(기본값) true인 경우 http에서 못씀
// 3. response객체를 이용하여 쿠키를 웹브라우저로 보내면 웹브라우저가 이 쿠키를 받아서 저장한다.
// 형식) response객체.addCookie(1번에서 만든 Cookie객체)
response.addCookie(nameCookie);
response.addCookie(ageCookie);
response.addCookie(cityCookie);
out.println("<html><head><meata charset='utf-8'>");
out.println("<title>Cookie연습</title></head>");
out.println("<body>");
out.println("<h2>Cookie 데이터가 저장되었습니다.</h2>");
out.println("<a href = '" +request.getContextPath()+ "/cookie/cookieTest.jsp'> 시작문서로 가기</a>");
out.println("</body><html>");
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
저장된 Cookie정보 읽어오기
- 전체 Cookie정보를 Request객체를 이용해서 가져온다.
가져온 Cookie 정보들은 배열에 저장된다.
형식) Cookie[] 쿠키배열변수 = request.getCookie();
2.쿠키 배열에서 해당 쿠키 정보를 구해온다.
package kr.or.ddit.basic.cookie;
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;
@WebServlet("/cookieReadTest.do")
public class CookieReadTest extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
response.setContentType("text/html; cahrset=utf-8");
PrintWriter out = response.getWriter();
// 저장된 Cookie정보 읽어오기
// 1. 전체 Cookie정보를 Request객체를 이용해서 가져온다.
// 가져온 Cookie 정보들은 배열에 저장된다.
// 형식) Cookie[] 쿠키배열변수 = request.getCookie();
Cookie[] cookieArr = request.getCookies();
out.println("<html><head><meata charset='utf-8'>");
out.println("<title>Cookie 읽기연습</title></head>");
out.println("<body>");
out.println("<h2>저장된 Cookie데이터 확인하기</h2>");
if(cookieArr==null || cookieArr.length==0) {
out.println("<h2> 저장된 쿠키가 하나도 없습니다. </h2>");
}else {
// 2.쿠키 배열에서 해당 쿠키 정보를 구해온다.
for(Cookie cookie : cookieArr) {
String name = cookie.getName(); //쿠키변수구하기
//String value = cookie.getValue(); //쿠키값구하기
// 쿠키값으로 저장된 데이터가 한글일 경우 디코딩해서 사용한다.
String value = URLDecoder.decode(cookie.getValue(), "utf-8");
out.println("쿠키변수: "+ name + "<br>");
out.println("쿠키값: "+ value + "<hr>");
}
}
out.println("<a href = '" +request.getContextPath()+ "/cookie/cookieTest.jsp'> 시작문서로 가기</a>");
out.println("</body><html>");
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
Cookie 삭제
- 쿠키 데이터의 삭제는 쿠키의 유지시간을 0으로 설정하는 방법을 사용한다.
- 먼저 삭제할 쿠기를 구한 후 이 쿠키의 유지시간을 0으로 설정한 후 addCookie()메서드로 다시 저장하면 된다.
package kr.or.ddit.basic.cookie;
import java.io.IOException;
import java.io.PrintWriter;
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;
@WebServlet("/cookieDeleteTest.do")
public class CookieDeleteTest extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 저장된 Cookie 삭제하기
response.setCharacterEncoding("utf-8");
response.setContentType("text/html; charset=utf-8");
PrintWriter out = response.getWriter();
// 1. 쿠키 데이터의 삭제는 쿠키의 유지시간을 0으로 설정하는 방법을 사용한다.
// 먼저 삭제할 쿠기를 구한 후 이 쿠키의 유지시간을 0으로 설정한 후 addCookie()메서드로 다시 저장하면 된다.
Cookie[] cookieArr = request.getCookies();
out.println("<html><head><meata charset='utf-8'>");
out.println("<title>Cookie 삭제연습</title></head>");
out.println("<body>");
out.println("<h2>저장된 Cookie 데이터 삭제하기 </h2> ");
if(cookieArr==null || cookieArr.length==0) {
out.println("<h3>삭제할 쿠키가 하나도 없습니다.</h3>");
}else {
//반복문을 사용해서 삭제할 쿠키를 찾는다.
for(Cookie cookie : cookieArr) {
String name = cookie.getName(); // '쿠키변수'값 구하기
// 예:city쿠키변수에 저장된 쿠키삭제하기
if("city".equals(name)) { // 삭제할 쿠키 찾기
cookie.setMaxAge(0); // 유지시간을 0으로 설정한다.
response.addCookie(cookie); // 변경된 쿠키를 저장한다.
}
}
}
out.println("<a href = '" +request.getContextPath()+ "/cookie/cookieTest.jsp'>시작문서로 가기</a>");
out.println("</body><html>");
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
}
쿠키예제1
jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<style type="text/css">
div{
border: 1px solid black;
width: 300px;
height: 100px;
}
</style>
</head>
<body>
<div>
<a href = "<%=request.getContextPath()%>/cookieCountServlet.do">
Cookie Count 증가하기</a>
<br><br>
<a href = "<%=request.getContextPath()%>/cookieCountDelServlet.do">
Cookie Count 초기화 하기 </a>
<br><br>
</div>
</body>
</html>
서블릿
package kr.or.ddit.basic.cookie;
import java.io.IOException;
import java.io.PrintWriter;
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 CookieCountServlet
*/
@WebServlet("/cookieCountServlet.do")
public class CookieCountServlet extends HttpServlet {
// int num=0;
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html; charset=utf-8");
PrintWriter out = response.getWriter();
// num++;
//count라는 쿠키가 있는지 검사한다.
Cookie[] cookies = request.getCookies();
int num= 0;
if(cookies!=null) {
for(Cookie cookie : cookies) {
String name = cookie.getName(); //쿠키변수 구하기
if("count".equals(name)) {
//현재의 count값구하기
num = Integer.parseInt(cookie.getValue());
break;
}
}
}
num++;
// 증가된 count값을 저장한다.
Cookie count = new Cookie("count", String.valueOf(num)); // 숫자는 문자열로 변환해야한다.
response.addCookie(count);
out.println("<html><head><meata charset='utf-8'>");
out.println("<title></title></head>");
out.println("<body>");
out.println("<h2>어서오세요. 당신은 "+ count.getValue()+ "번째 방문입니다. </h2>");
out.println("<a id='aid' href = '" +request.getContextPath()+ "/cookieCountServlet.do' >카운트 증가하기</a>");
out.println("<a href = '" +request.getContextPath()+ "/cookie/cookieTest02.jsp'>시작문서로 가기</a>");
out.println("</body><html>");
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
쿠키를 이용해서 아이디 기억하는 예제
Main_jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h2>cookie 연습용 main 페이지 입니다.</h2>
<a href = "<%=request.getContextPath()%>/cookie/cookieLogin.jsp">
login창으로 이동
</a>
</body>
</html>
Login_jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<style type="text/css">
div{
border: 1px solid black;
width: 300px;
height: 100px;
}
label{
margin:10px;
}
</style>
</head>
<body>
<%
// 스크립트릿영역 => java코드를 작성하는 영역
// 쿠키값 구하기(쿠키변수가 userId인 쿠키값 구하기)
Cookie[] cookies = request.getCookies();
String cookieUserId = ""; // 쿠키에 저장된 userid값이 저장될 변수
String chk = ""; //체크박스 체크용 변수
if(cookies!=null){
for(Cookie c : cookies){
if("id".equals(c.getName())){ //원하는 쿠키 변수 찾기
cookieUserId = c.getValue(); // 쿠키값 구하기
chk = "checked";
}
}
}
%>
<div>
<form action="<%=request.getContextPath()%>/cookieLoginServlet.do" >
<label>아이디:</label>
<input type="text" id="id" name="id" value="<%=cookieUserId%>" placeholder="ID를 입력하세요"><br>
<label>비밀번호: </label>
<input type="password" id="pass" name="pass" placeholder="PassWord를 입력하세요" ><br>
<label><input type="checkbox" name="check" <%=chk%> value="1" >id기억하기 </label><br>
<input type="submit" value="로그인">
</form>
</div>
</body>
<script type="text/javascript">
</script>
서블릿
package kr.or.ddit.basic.cookie;
import java.io.IOException;
import java.io.PrintWriter;
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;
// 아이디 패스워드가 test, 1234인지 확인
// 맞으면 홈으로 아니면 체크박스유무에 따라 다시 보여줌.
@WebServlet("/cookieLoginServlet.do")
public class CookieLoginServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html; charset=utf-8");
PrintWriter out = response.getWriter();
String id = request.getParameter("id");
String pass = request.getParameter("pass");
String check = request.getParameter("check");
//쿠키 객체 생성
Cookie idc = new Cookie("id", id);
Cookie passc = new Cookie("pass", pass);
if(request.getParameter("check")!=null) { //체크박스를 눌렀으면
// 쿠키저장
response.addCookie(idc);
}else { //체크박스를 안눌렀으면
//쿠키 삭제
idc.setMaxAge(0);
response.addCookie(idc);
}
if(idc.getValue().equals("test")&& passc.getValue().equals("1234")){ //잘입력했으면
response.sendRedirect(request.getContextPath()+"/cookie/CookieMain.jsp");
}else { //잘입력안했으면
response.sendRedirect(request.getContextPath()+"/cookie/cookieLogin.jsp");
}
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
Author And Source
이 문제에 관하여([Java] Cookie), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@vgo_dongv/Java-Cookie저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)