Cookie
- 웹 프로그래밍에 있어서 서버와 클라이언트간의 처리된 정보를 임시 저장하는 경우가 종종 발생한다. 이 때, 이 정보를 서버에 보관하여 사용하는 것을 session이라고 하고, 클라이언트에 저장하는 것을 cookie라고 한다.
- 쿠키의 생성 시점
- 쿠키는 클라이언트의 요청에 의해 서버에서 객체를 생성하여 (key, value) response 객체에 쿠키를 추가하여 클라이언트로 보내진다. 클라이언트에서는 브라우저에서 지정한 경로에 쿠키를 저장한다.
- 쿠키의 활용
1) 쿠키가 클라이언트에 저장된 이후, 요청 객체 request를 사용하면 다시 서버에 보내지고 쿠키값을 key/value 형식으로 호출하여 사용할 수 있다.
2) 동일한 key로 value값만 변경하여 addCookie를 하면 최종 value값이 key에 할당된다.
- 쿠키의 소멸
- 서버에서 쿠키마다 key명으로 유효시간을 설정하여 클라이언트로 보낸다. 해당 시간이 지나면 소멸된다.
- 삭제할 쿠키를 참조변수로 가져와서 setMaxAge(0)으로 설정하여 response.addCookie(참조변수)로 클라이언트로 보내면 해당 쿠키값이 삭제된다.
쿠키의 구성
- 쿠키는 이름, 값, 유효시간, 도메인, 경로로 구성된다.
- 쿠키 이름은 아크시 코드의 알파벳과 숫자만 포함할 수 있따
- 콤마, 세미콜론, 공백 등의 문자는 포함할 수 없다
- $로 시작할 수 없다.
쿠키의 생성
- 쿠키의 생성
Cookie c1 = new Cookie("쿠키의 이름", "쿠키의 값")
- 쿠키의 전달
response.addCookie(c1);
- 쿠키 읽기
쿠키는 요청객체(request)와 getCookie()메서드로 클라이언트에서 서버로 전달된다.
쿠키는 배열로 전달되어 각 데이터를 key, value 형식으로 확인할 수 있다.
Cookie[] cks = request.getCookies();
for(Cookie c : cks){
c.getName(); c.getValue;
}
<%
## a05_CookieList.jsp
<h2>현재 쿠키 리스트</h2>
<form method="post" action="a09_proc.jsp">
<table id="tb">
<tr><th>선택</th><th>쿠키의 키</th><th>쿠키의 값</th></tr>
<%
Cookie cks[] = request.getCookies();
for(int idx=0;idx<cks.length;idx++){
Cookie c = cks[idx];
//if(!c.getName().equals("JSESSIONID")){ // 쿠키의 default 값
%>
<tr><td><input type="checkbox" name="cidx" value="<%=idx%>"></td>
<td><input type="text" name="ckey" value="<%=c.getName()%>"></td>
<td><input type="text" name="cval" value="<%=c.getValue()%>"></td></tr>
<%
//}
}
%>
</table>
<input type="hidden" name="proc">
</form>
<h2>쿠키 등록</h2>
<form method="post" action="a09_proc.jsp">
<input type="hidden" name="proc" value="add">
<input type="hidden" name="cidx" value="0">
쿠기의 key:<input type="text" name="ckey">
쿠키의 value:<input type="text" name="cval">
</form>
<input type="button" value="쿠키생성" onclick="go('add')">
<input type="button" value="쿠키변경" onclick="go('upt')">
<input type="button" value="쿠키삭제" onclick="go('del')">
</body>
<script type="text/javascript">
function go(proc){
if(proc=='add'){
document.forms[1].submit();
}else{
document.querySelector("[name=proc]").value = proc;
document.forms[0].submit();
}
}
</script>
##a09_proc.jsp
<%
String proc = request.getParameter("proc");
String[] cidx = request.getParameterValues("cidx");
String[] ckey = request.getParameterValues("ckey");
String[] cval = request.getParameterValues("cval");
if(proc!=null){
for(String cidxS:cidx){
// checkbox로 선택되어진 key/value
int idx = Integer.parseInt(cidxS);
String key = ckey[idx];
String val = cval[idx];
if(proc.equals("add")||proc.equals("upt")){
Cookie c = new Cookie(key,val);
response.addCookie(c);
}
if(proc.equals("del")){
for(Cookie c : request.getCookies()){
if(c.getName().equals(key)){
c.setMaxAge(0);
response.addCookie(c);
}
}
}
}
}
response.sendRedirect("a05_CookieList.jsp");
%>
</body>
%>