본문 바로가기

JSP/쿠키,Cookie

쿠키 사용하기

웹 서버는 쿠키를 이용해서 웹 브라우저에 정보를 전송할 수 있다. 쿠키를 전달 받은 웹 브라우저는 이후 웹 섭에 요청을 보낼 때 쿠키를 함께 전송한다. 쿠키를 사용하면 웹 서버와 웹 브라우저가 필요한 값을 공유하고 상태를 유지할 수 있다.


쿠키 사용하기


쿠키는 웹 브라우저를 보관하는 데이터이다. 웹 브라우저는 웹 서버에 요청을 보낼 때 쿠키를 함께 전송하며, 웹 서버는 웹 브라우저가 전송한 쿠키를 사용해서 필요한 데이터를 읽을 수 있다. 

쿠키의 동장 방식은 아래와 같다.

1. 쿠키 생성 --요청-->   웹서버

                <--쿠키,응답

쿠키 저장소


2. 쿠키 생성                웹서버

                

쿠키 저장소

쿠키


3. 쿠키 생성 --요청,쿠키-->   웹서버

                

쿠키 저장소

쿠키


1. 생성 웹 서버 측에서 쿠키를 생성하고 이 쿠키를 응답 데이터의 헤더에 저장해서 웹 브라우저에 전송한다.

2. 저장 웹 브라우저는 응답 데이터에 포함된 쿠키를 쿠키 저장소에 보관한다.

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


웹 브라우저에 쿠키가 저장되면, 웹 브라우저는 쿠키가 삭제되기 전까지 웹 서버에 쿠키를 전송한다. 지속적으로 유지해야하는 정보는 쿠키를 사용하면 된다.


쿠키의 구성

이름:쿠키를 구별하는 데 사용되는 이름

값:쿠키의 이름과 관련된 값

유효시간:쿠키의 유지 시간

도메인:쿠키를 전송할 도메인

경로:쿠키를 전송할 요청 경로


쿠키 생성하기

JSP에서 쿠키를 생성할 때 Cookie 클래스를 사용한다. Cookie 클래스를 사용해서 쿠키를 추가하는 코드는 다음과 같다.

<%

Cookie cookie = new Cookie("cookieName","cookieValue"); //쿠키 객체 생성 (쿠키이름,쿠키값)

response.addCookie(cookie);

%>


쿠키객체를 생성했다면 addCookie() 메서드로 쿠키를 추가하면 된다. response.addCookie() 메서드를 사용하면 response 기본 객체는 웹 브라우저에 쿠키 정보를 전송한다.


cookieset.jsp코드는 아래와 같다.


<%@ page language="java" contentType="text/html; charset=EUC-KR"

    pageEncoding="EUC-KR"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">

<title>Insert title here</title>

</head>

<body>


<%

Cookie cookie = new Cookie("cookieN","cookieV"); //name, value

cookie.setMaxAge(60*60); //1시간 동안 유지

response.addCookie(cookie);//응답에 쿠키 객체를 줌

%>

<a href="cookieget.jsp">cookie get</a>

</body>

</html>


Cookie 객체를 생성한 후에 다음 메서드를 사용하여 쿠키의 특징을 변경하거나 읽어올 수 있다.

 메서드

리턴타입 

설명

getName()

String 

쿠키 이름을 구한다. 

getValue() 

String 

쿠키 값을 정한다. 

setValue(String value) 

void 

쿠키 값을 지정한다. 

setDomain(String patter) 

void 

이 쿠키가 전송될 서버의 도메인을 지정한다. 

getDomain(String pattern)

void 

이 쿠키가 전송될 서버의 도메인을 지정한다. 

getDomain() 

String 

쿠키의 도메인을 구한다. 

setPath(String uri) 

void 

쿠키를 전송할 경로를 지정한다. 

getPath() 

String 

쿠키의 전송 경로를 구한다. 

setMaxAge(int expiry) 

void 

쿠키의 유효 시간을 초단위로 지정한다. 음수면 웹 브라우저를 닫을 때 쿠키가 삭제된다. 

 getMaxAge()

int 

쿠키의 유효시간을 구한다. 


쿠키 값 읽어오기

웹 브라우저는 요청 헤더에 쿠키를 저장해서 보내며, JSP는 다음 코드를 사용해서 쿠키 값을 읽어올 수 있다.

Cookie[] cookies = request.getCookies(); //request.getCookies() 메서드는 Cookie 배열을 리턴한다.


cookieget.jsp 코드는 아래와 같다.

<%@ page language="java" contentType="text/html; charset=EUC-KR"

    pageEncoding="EUC-KR"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">

<title>Insert title here</title>

</head>

<body>

<%

Cookie[] cookies = request.getCookies();

for (int i=0;i<cookies.length;i++){

String str = cookies[i].getName();

if(str.equals("cookieN")){

out.println("cookies["+i+"]name:"+cookies[i].getName()+"<br/>");

out.println("cookies["+i+"]value:"+cookies[i].getValue()+"<br/>");

out.println("=============================<br/>");

}

}

%>

<a href="cookiedel.jsp">cookie delete</a>

</body>

</html>


cookieset.jsp에서 쿠키가 생성되고 응답 데이터에 쿠키객체를 추가한다. cookieget.jsp에서 쿠키를 요청하면 아래와 같이 출력된다.


cookies[0]name:cookieN
cookies[0]value:cookieV
=============================
cookie delete


쿠키의 유효시간

쿠키는 유효시간이 있다. 유효시간을 지정하지 않으면 브라우저가 종료될 때 쿠키가 삭제된다. 종료한 다음 브라우저를 켜면 삭제한 쿠키는 웹 서버에 전송되지 않는다. 유효시간을 정해 놓으면 그 시간 동안 쿠키가 존재한다. 유효시간이 지나지 않았으면 브라우저를 종료해도 쿠키가 삭제되지 않는다.


유효시간은 getMaxAge() 메서드로 지정한다. 초단위로 유효시간을 지정한다. 위에 cookieset.jsp 코드를 보면 cookie.setMaxAge(60*60) 메서드가 있는데 이는 60초 * 60초이므로 1시간을 뜻한다. 아이디 기억, 자동 로그인 기능은 쿠키를 사용한다.


쿠키를 사용한 로그인


아이디란과 비밀번호란을 채우고 로그인 버튼을 누르면 loginOk.jsp로 페이지 이동한다.

login.html

<!DOCTYPE html>

<html>

<head>

<meta charset="EUC-KR">

<title>Insert title here</title>

</head>

<body>

<form action="loginOk.jsp" method="post">

아이디:<input type="text" name="id" size="10"><br/>

비밀번호:<input type="password" name="pw" size="10"><br/>

<input type="submit" value="로그인">

</form>

</body>

</html>


아이디에 abc 비밀번호에 1234가 들어왔다면 welcom.jsp 페이지로 이동하고 아니라면 다시 login.html 페이지를 띄워준다.

loginOk.jsp

<%@ page language="java" contentType="text/html; charset=EUC-KR"

    pageEncoding="EUC-KR"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">

<title>Insert title here</title>

</head>

<body>

<%!

String id,pw;

%>

<%

id = request.getParameter("id");

pw = request.getParameter("pw");

if(id.equals("abc")&&pw.equals("1234")){ //나중에 디비 접속해서 회원인지 확인해야 함.

Cookie cookie = new Cookie("id",id);

cookie.setMaxAge(60);

response.addCookie(cookie);

response.sendRedirect("welcome.jsp");

}else{

response.sendRedirect("login.html");

}

%>

</body>

</html>


로그인 성공이면 welcome.jsp로 이동한다. 그 아래 로그아웃 버튼을 누르면 logout.jsp 페이지로 이동한다.

welcome.jsp


<%@ page language="java" contentType="text/html; charset=EUC-KR"

    pageEncoding="EUC-KR"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">

<title>Insert title here</title>

</head>

<body>

<%

Cookie[] cookies = request.getCookies();

for(int i=0;i<cookies.length;i++){

String id = cookies[i].getValue();

if(id.equals("abc")) out.println(id+"님 안녕하세요."+"<br/>");

}

%>

<a href="logout.jsp">로그아웃</a>

</body>

</html>


logout.jsp


<%@ page language="java" contentType="text/html; charset=EUC-KR"

    pageEncoding="EUC-KR"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">

<title>Insert title here</title>

</head>

<body>

<%

Cookie[] cookies = request.getCookies();

if(cookies!=null){

for(int i=0; i<cookies.length;i++){

if(cookies[i].getValue().equals("abc")){

cookies[i].setMaxAge(0);

response.addCookie(cookies[i]);

}

}

}

response.sendRedirect("cookietest.jsp");

%>

</body>

</html>