쿠키란?
웹 브라우저에서 서버로 어떤 데이터를 요청하면, 서버측에서는 알맞은 로직을 수행한 후 데이터를 웹 브라우저에 응답한다. 그리고 서버는 웹브라우저와의 관계를 '종료'한다.
웹 브라우저에 응답 후에 관계를 끊는 것은 'http 프로토콜'의 특징이다.
연결이 끊겼을 때, 어떤 정보를 지속적으로 유지하기 위한 수단으로 '쿠키'를 사용한다.
쿠키는 서버에서 생성 되고, 클라이언트 속에 특정 정보를 저장한다. 그리고 서버에 요청할 때마다 쿠키의 속성값을 참조하거나 변경할 수 있다.
쿠키 생성 (쿠키 클래스 이용)
속성 설정 (id,pw,name 등 속성을 setter를 이용해서 전송)
response 객체에 쿠키 탑재 (response.addCookie()를 이용)
※주의
우리가 기존에 req와 res는 요청과 응답으로 클라이언트와 서버가 각각 하는 것으로 배웠다.
쿠키를 탑재할 때 response를 이용하고, 쿠키 값을 가져올 때 request를 해야하는 것을 기억하자
쿠키를 이용한 간단한 로그인 페이지 만들기
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | <!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> | cs |
loginOk.jsp
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | <%@page import="javafx.scene.control.Alert"%> <%@ 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("abcde") && pw.equals("12345")){ // 아이디가 abcde, 비밀번호 12345일 때 Cookie cookie = new Cookie("id", id); // 쿠키 생성 cookie.setMaxAge(60); // 60초간 생성 response.addCookie(cookie); response.sendRedirect("welcome.jsp"); //welcome.jsp로 쿠키값 전송 } else { response.sendRedirect("login.html"); } %> </body> </html> | cs |
맞으면 welcome.jsp로, 틀리면 다시 login.html로 가는 if문으로 이루어져 있다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | <%@ 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("abcde")) out.println(id + "님 안녕하세요." + "<br/>"); } %> <a href = "logout.jsp">로그아웃</a> </body> </html> | cs |
for문을 돌려서 쿠키 값을 id에 저장하면서, 값이 abcde인 것을 찾으면 출력문을 나타내는 모습이다.
이곳은 로그인 완료 화면이기 때문에 하이퍼링크로 logout.jsp를 나타내고 로그아웃도 구현할 수 있다.
logout.jsp
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | <%@ 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) { // 쿠키 값이 null 값이 아니면 for(int i=0; i<cookies.length; i++){ if(cookies[i].getValue().equals("abcde")){ // 쿠키값 중에 abcde가 있으면 cookies[i].setMaxAge(0); // 해당 값 쿠키 제거 response.addCookie(cookies[i]); // 다시 삭제한 쿠키 탑재 } } } response.sendRedirect("login.html"); %> </body> </html> | cs |
우리가 로그아웃을 하면, 기존에 저장된 내 아이디와 비밀번호의 쿠키 값을 삭제시켜줘야 할 것이다.
따라서 쿠키값이 존재할 때, 내 아이디에 해당하는 abcde를 찾으면 해당 쿠키 값을 0으로 만들어 제거시키는 모습이다. 그리고 제거한 쿠키를 다시 response해서 탑재시켜주면 된다.
마지막으로 login.html로 다시 보내주면 로그인창으로 돌아갈 수 있다.
사실, 쿠키 값을 이용한 로그인은 보안이 좋지 않아서 해킹을 당하기 쉽다. 따라서 실제 홈페이지에서 이용하지는 않는 형태다. 하지만 쿠키 값에 대한 진행방향에 대해서는 꼭 기억해두자.
지금은 abcde, 12345로 아이디와 비밀번호를 하드코딩으로 입력했지만, 오라클 DB를 배운 뒤에는 저장된 데이터를 기반으로 로그인 접속을 할 수 있을 것이다.
'JSP' 카테고리의 다른 글
[JSP] 예외 페이지 (0) | 2018.05.11 |
---|---|
[JSP] 세션 (0) | 2018.05.09 |
[JSP] 액션 태그 (0) | 2018.05.09 |
[JSP] JSP 기본 정리 (0) | 2018.05.09 |
[JSP] Servlet 정리 (0) | 2018.05.07 |