▶ 이번 시간에는 현재까지도 많이 쓰이고 있는
Cookie의 개념과 사용법에 대해서 알아보겠습니다.
🔑 목차
🎉 1. Cookie 란?
🎉 2. Cookie 구현
🚩 1. Cookie 란?
▶ Cookie는 현재는 보안 관련 문제 때문에 점점 쓰이지 않는 추세지만,
과거부터 유용하게 쓰여 온 기능이다. (하지만 보안에 취약하다.)
▶ 클라이언트와 서버의 연결을 유지시켜주는 방법 중 하나로 Cookie라는 것이 있다.
(연결 시도 흔적을 이용한 방법이기 때문에 과자의 부스러기 느낌으로 Cookie가 됐다.)
▶ Server와 Client가 연결을 시도할 때, 흔적이 발생하는데,
이 흔적을 가지고 과거 접속했다는 것을 알고 (재연결시) 해당 접속의 유지를 돕는 개념이다.
▶ 우리가 현재 사용하고 있는 연결 프로토콜은 Http이고,
이 프로토콜은, 브라우저(클라이언트)에서 서버로 request를 보내고 response를 받은 뒤에는
연결이 끊어진다. 즉, 1회 정보를 주고 받은 뒤에, 연결을 해제해버린다.
(여러 사용자가 이용하는 경우, 서버의 과부하를 막기 위해서)
▶ 이렇게 연결을 그때마다 해제해버리면,
로그인 / 장바구니 등 다양한 정보를 다시 입력해야 하기 때문에 비효율적이다.
그래서 등장한 것이 Cookie(쿠키)라는 흔적이다.
▶ 서버에 Cookie를 저장하게 되면, 부하가 걸릴 수 있기에, 개인 브라우저에 저장됨
🚩 2. Cookie 구현
▶ 쿠키가 없는 경우(==null) / 첫 접속인 경우 = 쿠키 생성
쿠키가 있는 경우(!=null) = 쿠키 재활용
이러한 구도이다.
< LoginCon.java (Servlet 파일) >
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String mID = request.getParameter("mID");
String mPW = request.getParameter("mPW");
PrintWriter out = response.getWriter();
out.print("<p>mID : " + mID + "</p>");
out.print("<p>mPW : " + mPW + "</p>");
Cookie[] cookies = request.getCookies();
Cookie cookie = null;
for(Cookie c : cookies) {
System.out.println("c.getName() :"+c.getName()+", c.getValue() :"+c.getValue());
if(c.getName().equals("memberID")) {
cookie = c;
}
}
if(cookie == null) {
cookie = new Cookie("memberID", mID);
}
response.addCookie(cookie);
cookie.setMaxAge(60*60);
response.sendRedirect("loginOk.jsp");
}
▶ Cookie는 여러 개의 정보가 있을 수 있기 때문에, 배열로 관리한다.
▶ Cookie는 사용자 브라우저에 저장되고,
사용자의 request에 의해서 발생된 것이기 때문에 request 객체에서 getCookies()를 한다.
if(cookie == null) {
cookie = new Cookie("memberID", mID);
}
▶ “memberID”라는 이름의 Cookie가 없다면,
Cookie name = “memberID”
Cookie value = mID (사용자가 입력한 ID ) ( request.getParameter("mID"); )
로 새로 생성한다.
response.addCookie(cookie);
(Cookie가 없어서) 위에서 새로 만든 Cookie를 추가해서 돌려준다 (response) .
cookie.setMaxAge(60*60);
▶ Cookie의 생존기간을 60*60초,
즉, 1시간으로 설정하는 Method이다. (1시간 뒤 자동 삭제)
< login.jsp (JSP 파일) >
<body>
<%
Cookie[] cookies = request.getCookies();
System.out.println("cookies : "+cookies);
if(cookies!=null){
for(Cookie c : cookies){
if(c.getName().equals("memberID")){
response.sendRedirect("loginOk.jsp");
}
}
}
%>
<form action="LoginCon" method="post">
ID : <input type="text" name="mID"><br>
PW : <input type="password" name="mPW"><br>
<input type="submit" value="login">
</form>
</body>
- login.jsp는 처음 로그인 화면 (ID, PW 입력) 이다.
if(cookies!=null){
for(Cookie c : cookies){
if(c.getName().equals("memberID")){
response.sendRedirect("loginOk.jsp");
}
}
}
▶ “memberID” 라는 이름의 Cookie가 존재한다면
login화면을 거치지 않고, loginOk.jsp로 강제 이동(redirect) 시켜버린다.
< loginOk.jsp (JSP 파일) >
<body>
<%
Cookie[] cookies = request.getCookies();
for(Cookie c : cookies){
out.print("name : "+c.getName()+"<br>");
out.print("value : "+c.getValue()+"<br>");
out.print(" ----- ----- ----- ----- <br>");
}
%>
</body>
▶ 최종 화면, 모든 Cookie들 출력
< 실행 결과 >
▶ JSESSIONID 등의 Cookie들은 브라우저가 만든 기본/자체적인 Cookie이다.
(무시해도 된다.)
▶ login.jsp로 주소를 수정하고, 접속 시도해보자.
▶ 이미 memberID라는 이름의 Cookie가 있기 때문에,
loginOK.jsp로 강제 이동된다. (login 화면 중복 방지)
✋ 다음 포스팅에서는 Session에 대해서 다뤄보겠습니다.
'(2022) 공부 (Study)' 카테고리의 다른 글
🔥 Spring Framework - #1 Spring 개요 (0) | 2020.12.31 |
---|---|
🔥 JSP 기본 정리 - #2 개발 환경 설정 (Eclipse) (0) | 2020.12.31 |
🔥 JSP 기본 정리 - #15 한글 처리 방법 (0) | 2020.12.31 |
🔥 JSP 기본 정리 - #14 Session (0) | 2020.12.31 |
🔥 JSP 기본 정리 - #1 웹 프로그램 개요 (0) | 2020.12.30 |