쿠키 Cookie
- 쿠키는 사이트에 접속할 때 생성되는 정보를 담은 4KB 이하 크기의 임시 파일을 의미
- 네트워크 환경에서 클라이언트와 웹 서버 간의 상태를 지속적으로 유지하기 위해 사용
- 서버에서 생성하고 브라우저에 응답하여 저장하도록 하는 데이터 조각이다.
- 브라우저는 저장된 쿠키를 해당 사이트에 자원 요청 시 포함하여 전송함.
- 브라우저가 사이트를 이요하면서 유지할 값이 있을 때 사용함.
- 쿠키는 불순한 의도로 복사되거나 해킹 등에 의해 개인 정보가 탈취될 수 있다는 보안상 취약한 단점 존재
- 저장 수 용량이 제한이 있다는 단점이 있음.
- 서버에 부하를 주지 않다는 장점이 있음.
쿠키의 동작 과정
1. 브라우저에서 서버로 자원을 요청
2. 서버에서 쿠키 생성 및 응답에 포함
3. 브라우저는 응답받은 쿠키를 저장소에 저장
4. 해당 사이트로 요청 시 쿠키를 함께 전송
5. 요청에서 쿠키 정보를 확인
쿠키의 구성 요소
- 이름 : 쿠키 이름
- 값 : 이름에 열결된 값
- 유효시간 : 초단위 시간(설정하면 해당 시간동안 유지하고 설정하지 않으면 세션 유지 시간동안만 유지)
- 도메인 : 쿠키를 생성한 사이트
- 경로 : 쿠키를 전송할 요청 URL(일반적으로는 최상위 경로)
쿠키에 의한 웹 브라우저 구분
- 쿠키는 클라이언트의 정보를 웹 브라우저에 저장하기 때문에 이후 웹 서버로 서비스를 요청할 경우 쿠키를 읽어 새로운 웹 브라우저인지 아니면 이전에 요청했던 웹 브라우저인지를 구별함
- 쿠키가 생성되면 웹 브라우저는 쿠키가 삭제되기 전까지 쿠키의 요청이 있을 때마다 웹 서버에게 쿠키를 제공
response 내장 객체
- JSP 웹페이지의 실행 결과를 웹 브라우저에 반환해 줄 때 사용하는 객체
- 서버는 클라이언트에 대한 응답을 response 객체를 통해 처리
응답 형식 지정 메소드
- 컴텐츠 타입이나 문자 셋에 대한 정보를 지정할 때 사용하는 메서드의 종류는 다음과 같다.
응답 헤더 메소드
- 헤더 정보나 쿠키 등에 대한 정보를 지정할 때 사용하는 메소드의 종류는 다음 표를 참조
페이지 이동 관련 메소드
- 웹 브라우저에서 지장한 특정 페이지로 이동할 때 사용하는 메소드의 종류는 다음과 같다.
페이지 이동하기
- sendRedirect() 메소드
- 웹 브라우저에서 다른 페이지로 강제 이동하기 위해 사용
response.sendRedirect("파일명 또는 URL 주소")
로그인 화면
세션 생성하여 ID PW 맞는지 확인하기
<hr>
<%
request.setCharacterEncoding("UTF-8");
String id = request.getParameter("id");
String pw = request.getParameter("passwd");
BufferedReader reader = null;
try{
String filePath = application.getRealPath("/WEB-INF/account.txt");
reader = new BufferedReader(new FileReader(filePath));
while (true){
String str = reader.readLine();
if(str ==null){
break;
}
String[] result = str.split(" ");
String uid = result[0];
String upw = result[1];
String uname = result[2];
if(id.equals(uid) && pw.equals(upw)){//로그인 성공으로 이동
session.setAttribute("memberId" , id);
session.setAttribute("memberPw", pw);
response.sendRedirect("loginSuccess.jsp");
return;
}
}
response.sendRedirect("loginFailure.jsp");//전부 실패시 로그인 실패로 이동
}catch (FileNotFoundException fnfe){
out.println("파일이 존재하지 않습니다.");
}catch (IOException ioe){
out.println("파일을 읽을 수 없습니다.");
}finally{
try{
reader.close();
}catch(Exception e){
out.println("reader 닫기 에러발생");
}
}
%>
로그인 성공
Home > 로그인 성공 화면
<hr>
로그인을 성공적으로 수행하였습니다.<br>
home > 모든 세션 정보 확인하기
<hr>
<%
String name = "";
String value = "";
Enumeration en = session.getAttributeNames();
int count = 0;
while(en.hasMoreElements()){
count++;
name = en.nextElement().toString();
value = session.getAttribute(name).toString();
out.println(count + ".세션의 속성 이름 : ["+ name +"]<br>");
out.println(count + ".세션의 속성값 : ["+ value +"]<br>");
}
out.println("새로운 세션 생성 성공 ! <br>");
out.println("[ " + value + " ]님이 입장하셨습니다. ");
%>
로그인 실패
<body>
Home > 로그인 실패 화면
<hr>
로그인을 실패하였습니다! <br><br>
<form name = "loginForm" action = "login.jsp" method = "post">
<input type = "submit" value = "로그인하기">
</form>
</body>
Cookie 클래스의 역할
- 쿠키는 연결 상태가 없는 HTTP 프로토콜을 위해 접속된 상태를 그대로 유지할 때 필요
- 쿠키는 웹 브라우저에 상태 정보를 저장하기 때문에 이후 웹 서버로 전송되는 서비스 요청에는 쿠키가 가지고 있는 정보도 함께 포함되어 전송
- Cookie 클래스는 쿠키 생성 및 관련 정보 등을 설정하기 위해 다양한 쿠키 관련 메서드를 제공
쿠키 관련 메소드
쿠키와 세션의 차이
- 웹 브라우저에서 서버로 접속할 때 쿠키 대신 세션을 사용하는 이유는 쿠키에 비해 세션이 보안에 강하기 때문임
- 쿠키와 세션의 가장 큰 차이점은 웹 브라우저를 통해 서비스를 요청할 때 사용자의 정보가 저장되는 위치
- 쿠키는 서버의 자원을 전혀 사용하지 않지만 세션은 서버의 자원을 사용함
- 웹 서비스에 대한 요청 속도는 세션보다 쿠키가 더 빠르므로 쿠키와 세션의 선택은 주어진 개발 환경에 맞춰 사용하면 됨.
쿠키 생성 메서드
Cookie cooks = new Cookie("memberId" , "space");//쿠키이름, 쿠키값
response.addCookie(cooks); // 쿠키 설정(변수명)
쿠키 정보 메서드
- getCookie() 메서드 : 쿠키 객체 가져오기
- Cookie [] 변수명 : 여러 개의 쿠키 객체 가져오기
Cookie[] cooks = request.getCookies();
- getName() 메소드 : 쿠키 이름 가져오기
- getValue() 메소드 : 쿠키값 가져오기
Cookies[] cooks = request.getCookies();
for(int count =0 ; count < cooks.length; count++){
out.println(cooks[count].getName() + " : " + cooks[count].getvValue());
}
쿠키 삭제 기능
- Cookie 클래스에서는 쿠키를 삭제하기 위한 별도의 기능을 제공하지 않기 때문에 쿠키를 삭제하려면 setMaxAge() 메서드를 사용하여 괄호 안에 정수의 값 0을 매개변수로 입력하여 유효시간이 만료됨에 따라 쿠키는 자동으로 삭제되도록 선언해야 함
- 쿠키의 유효시간은 초 단위이다.
- 시간이 지정되지 않으면 '세션쿠키' 라고하며 브라우저가 종료되면 삭제됨
Cookie cooks = new Cookie("userID" , "u_id");
cooks.setMaxAge(0); //1시간으로 하려면 60*60으로 하면 됨
response.addCookie(cooks);
- 유효시간을 0으로 만듦으로 쿠키를 삭제한다.