43일차 - Cookie(client)

김재령·2022년 2월 28일
0

웹 처리에 사용되는 어떤 데이터를 클라이언트(호스트가 아니라 프로그램)에 문자열 형식으로 저장하는 방식

  • http 프로토콜은 요청-응답 이후 연결이 유지되지 않는다(keep alive 제외)
  • 페이지가 변경되어도, 다음번에 사이트에 재방문해도 유지되어야 하는 정보
  • 클라이언트에 저장하면 cookie, 서버에 저장하면 session
  • 초창기에는 Cookie에 ID/Password, 주민등록번호, 열어본 게시물의 목록-게시글 번호가 저장되는 것(방문기록)
  • Cookie는 브라우저가 관리하므로, 사용자의 컴퓨터에 저장이 된다
  • 개인정보 도난의 위험이 있어서, 최근에는 사이트마다 Cookie 수집에 대한 허용을 확인한다
  • 쿠키는 웹 프로그램이라서 크롬의 Cookie와 엣지의 Cookie가 다르다
  • 쿠키에 저장된 정보를 기반으로 자동로그인되는 것도 있다
  • 쿠키를 만드는 건 서버가 만들고 들고있는건 클라이언트가 들고 있다
  • 클라이언트는 쿠키를 보유하고 있다가, 해당 사이트에 재방문시 받았던 쿠키를 지참하여 방문한다
  • 서버는 클라이언트가 가져온 쿠키를 식별하여 클라이언트 마다 서로 다른 처리를 수행할 수 있다
  • 브라우저별로 다르게 쿠키를 관리한다

보낼때는 request 꺼내올 때는 response

Object login =  session.getAttribute("login");
String userid = request.getParameter("userid");
String idsave = request.getParameter("idsave");
boolean flag = idsave != null && login != null;

// 쿠키를 idsave에 저장
// Cookie c = new Cookie("idsave" idsave);
// flag 값에 따라서 setMaxAge 주기
Cookie cid = new Cookie("userid", userid);

if(idsave == null && login == null){
cid.setMaxAge(0);
}
else{
cid.setMaxAge(60 * 60 * 24);
response.addCookie(cid);
// response.sendRedirect("loginForm.jsp");
<%
// 전달받은 내용은 request.getCookies()로 가지고 온다
// 이것을 Cookie 타입의 배열에 저장한다

// 요청에 담긴 쿠키의 배열(쿠키는 하나 이상일 수도 있다)
// 내가 원하는 쿠키의 값을 저장할 변수
Cookie[] cookies = request.getCookies();
String value = null;

// 배열을 돌면서 cookies의 i번째를 Cookie c에 담는다
// 첫 방문이면 쿠키가 아예 없다
// 쿠키 배열의 i번째 요소를 꺼내서 이름이 일치하는 쿠키를 찾아서 그 값을 저장한다
for(int i = 0; cookies != null && i < cookies.length; i++){
Cookie c = cookies[i];
// c의 getName()이 저장한 test와 일치한다면
if(c.getName().equals("test")){
// value에 c.getValue()를 담는다
value = c.getValue();

}
}
%>
<h1>쿠키 확인하기</h1>
<hr>
<h2>입력한 쿠키 내용은 [<%=value %>] 입니다</h2><%-- 저장한 쿠키 값을 출력한다 --%>
<h2>입력한 쿠키 내용은 ${ cookie.test.value } 입니다</h2><%-- EL태그로 출력하려면 위 스크립틀릿 없이 출력 가능(출력에 한에서 표현식 안쓰고 가능) --%>
================================================
// 쿠키를 삭제하려면 동일한 이름의 쿠키를 생성하고, 유효시간을 0으로 설정한 이후 클라이언트에게 보낸다
// 쿠키문자열은 인코딩이 제한되기 때문에 띄워쓰기를 포함하지 않고 언더바( _ ) 나 다른기호로 대체한다

Cookie c = new Cookie("test", "아무거나");
c.setMaxAge(0);

response.addCookie(c);
response.sendRedirect("ex01-cookie-check.jsp");
================================================
// 파라미터를 입력받아서
String test = request.getParameter("test");

// Cookie c = new Cookie(String name, String value);
// 새로운 쿠키를 생성
// 쿠키 생성자에 저장한다
Cookie c = new Cookie("test", test);

// 60초 * 60분 * 24시간  * 30일 : 유효기간을 설정
c.setMaxAge(60 * 60 * 24 * 30);

// addCookie에 저장한 객체를 담는다
response.addCookie(c);

// 그리고 ex01-cookie-check로 보낸다
response.sendRedirect("ex01-cookie-check.jsp");

<%
String theme = request.getParameter("theme");// 파라미터가 없을 수도 있다
if(theme != null){
Cookie c = new Cookie("theme", theme);
c.setMaxAge(60 * 60 * 24 * 7);
response.addCookie(c);// 쿠키를 보내고 나면, 이후 클라이언트의 재 방문시 쿠키를 지참하여 가져온다
// 재방문 (새로고침)을 유도해야 쿠키가 곧바로 적용된다(매장-서버 / 손님-클라이언트 /  매장에서 쿠폰을 나눠주고 다시 오라는 거랑 비슷하다)
response.sendRedirect("ex02.jsp");
}

%>

profile
with me

0개의 댓글