.jsp 연습하기 - 쿠키

오늘·2021년 5월 17일
0

웹 페이지 연습

목록 보기
14/35

쿠키

  • 클라이언트와 웹 서버 간의 상태를 지속적으로 유지하는 방법
  • 세션과는 달리 상태 정보를 웹 서버가 아닌 클라이언트에 저장한다.
    -> ex. 어떤 웹 사이트를 처음 방문한 사용자가 로그인 인증을 하고 나면 아이디와 비번을 기록한 쿠키가 만들어지고. 그 다음부터는 사용자가 사이트에 접속시 별도의 로그인 절차를 거치지 않고 쉽게 접속할 수 있다.
  • 장점 : 클라이언트의 특정 폴더에 정보를 저장하기 깨문에 웹 서버의 부하를 줄일 수 있다는 것
  • 단점 : 웹 브라우저가 접속했던 웹 사이트에 관한 정보와 개인 정보가 기록되기 때문에 보안성 문제가 있다.


쿠키와 세션의 차이

구분 쿠키 세션
사용 클래스 Cookie 클래스 Http Session 인터페이스
저장 형식 텍스트 형식 Object 형
저장 장소 클라이언트 서버(세션 아이디만 클라이언트에 저장)
종료 시점 쿠키 저장시 설정
(설정하지 않을 경우 웹 브라우저 종료 시 소멸)
정확한 시점을 알 수 없다
리소스 클라이언트의 리소스 사용 서버의 리소스 사용
보안 클라이언트에 저장되므로
사용자의 변경이 가능하여 보안에 취약
서버에 저장되어 있기 때문에 상대적으로 안정적

쿠키 생성

  • cookie() 메소드를 사용한다
  • 쿠키 생성 후에는 반드시 response 내장 객체의 addCookie() 메소드로 쿠키를 설정해야 한다 -> Cookie Cookie(String name, String value)

작성해보기

1.클라이언트 요청하기

<body>
	<p> 쿠키 생성하기 </p>
	<form action="1_cookie_process" method="post">
		<p> 아이디 : <input type="text" name="id">
		<p> 비밀번호 : <input type="password" name="pw">
		<p> <input type="submit" value="전송" >
	</form>
</body>
  1. 서버쪽 코드에서 쿠키를 생성하고 클라이언트에게 보내기
<body>
	<p> 쿠키 서버 쪽 <p>
	<%
		String u_id = request.getParameter("id");
		String u_pw = request.getParameter("pw");
		
		if(u_id.equals("admin") && u_pw.equals("1234")) {
			Cookie cookie_id = new Cookie("userID", u_id);
			Cookie cookie_pw = new Cookie("userPW", u_pw);
			response.addCookie(cookie_id);
			response.addCookie(cookie_pw);
			
			out.print("쿠키 생성이 성공했습니다<br>");
			out.print(u_id + " 님 환영합니다");
		} else {
			out.print("쿠키 생성에 실패했습니다");
		}
	%>
</body>

저장되지 않은 아이디와 비밀번호 입력 시 쿠키생성 실패 안내
저장된 아이디와 비밀번호 입력 시 쿠키 생성 성공 안내


쿠키 객체 얻기

  • 클라이언트에 저장된 모든 쿠키 객체를 가져오려면 request 내장 객체의 getCookies() 메소드를 사용한다.
    -> 재방문 했을 시 이미 저장해둔 쿠키를 가져오려하는 것
  • 쿠키 객체가 여러 개 일때는 배열 형태로 가져온다 - Cookie[] request.getCookies()

작성해보기

<body>
	<p> Cookie 클라이언트 쪽 재방문(요청) 했을 시 서버 쪽의 코드 </p>
	<hr>
	<%
		Cookie[] cookies = request.getCookies();
		out.print("현재 설정된 쿠키의 개수" + cookies.length + "<br>");
		out.print("-------------------------------------<br>");
		for(int i=0; i<cookies.length; i++){
			out.print("설정된 쿠키의 속성 이름 [" + i + "] : " + cookies[i].getName() + "<br>");
			out.print("설정된 쿠키의 속성 값 [" + i + "] : " + cookies[i].getValue() + "<br>");
			out.print("-------------------------------------<br>");
		}
	%>
</body>

실행에서 유의해야 할 점은 쿠키를 만든 곳에서 쿠키를 찾아야 한다는 것이다.
쿠키 생성 코드를 크롬에서 실행했다면, 찾는 것도 크롬에서
쿠키 생성 코드를 익스플로러에서 실행했다면, 찾는 것도 익스플로러에서

크롬에서 실행해본 결과 우리가 설정해놓은 값 2개와 기본 값 1개, 총 3개의 쿠키가 저장되어 있다고 확인되었다.


쿠키 삭제

  • 쿠키의 유효 기간을 결정하는 setMaxAge() 메소드에 유효 기간을 0으로 설정하여 쿠키를 삭제할 수 있다.
  • setMaxAge() 메소드의 모양 void setMaxAge(int age)

쿠키 모두 삭제

  1. 쿠키 유효기간을 0으로 만들어 쿠키에게 보내기
<body>
	<p> Cookie 삭제하기 1. 쿠키 유효기간을 0으로 만들어 쿠키에게 보내기
	<hr>
	<%
		Cookie[] cookies = request.getCookies();
		for(int i=0; i<cookies.length; i++){
			cookies[i].setMaxAge(0);
			response.addCookie(cookies[i]);
		}
		response.sendRedirect("2_cookie.jsp");
	%>
</body>
  1. 위의 '쿠키 객체 얻기'의 모습으로 확인하기
    response.sendRedirect("2_cookie.jsp"); <- 이 부분이다

실행시 원래 기본으로 있는거 하나는 놔두고, 내가 생성했던 두 개는 사라진 것을 확인 할 수 있었다. 기본값을 지운 이유는 그냥 지우고 싶어서..

쿠키 하나 삭제

만약 쿠키를 하나만 지우고 싶다면 for문을 돌리지 않고, 원하는 cookies[] 에 원하는 인덱스를 적어 그것만 삭제 할 수도 있다.

	<%
		Cookie[] cookies = request.getCookies();
		cookies[0].setMaxAge(0);
		response.addCookie(cookies[0]);
		response.sendRedirect("2_cookie.jsp");
	%>

실행 전에는 이렇게 있었던 쿠키들이

이렇게 변한 것을 확인 할 수 있다.


0개의 댓글