일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 30 | 31 |
- conda 기초 설정
- window netstat time wait 제거
- 실행중인 포트 죽이기
- 오블완
- 려려
- conda 가상환경 설정 오류
- conda base 활성화
- 3000 port kill
- time wait port kill
- 티스토리챌린지
- conda base 기본 설정
- Today
- Total
모도리는 공부중
21.01.11. Cookie & Server 본문
아직 정리하지 못한 jsp & servlet는 일단 보류하고..
오늘부터 새로운 파트!
Cookie & Session
Client가 Server로 요청하면 해당 Page를 Client에게 전송(응답)한 후 연결을 종료한다. 그렇기 때문에 우리는 웹페이지에서 개발자도구(F12)를 통해 편집이 가능하다.
바로 이렇게 ↓
그럼 이렇게 연결이 끊기는데 우리가 로그인한 정보는 어떻게 이어지는걸까?
Cookie & Session
- Client의 정보를 지속적으로 유지하기 위한 방법
- client에 저장한다 → cookie
- server에 저장한다 → session
클라이언트에 저장되는 쿠키는 보안에 취약, 하지만 서버에 저장하는 세션은 보안이 강력하다.
Cookie
- 전달할 데이터를 Web Browser(Client)로 보냈다가 Web Server로 되돌려 받는 방법
쌓여있는 쿠키 확인을 위해 잠시 크롬에 확장프로그램을 설치해보자.
그리고 수업을 위해 새로운 프로젝트를 생성해봅시다.
package com;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/MakeCookie")
public class MakeCookie extends HttpServlet {
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
Cookie cookie = new Cookie("id", "mdr"); //Cookie(name, value)
/* 1. 기본적으로 쿠키안에 있는 값은 영어만 넣을 수 있다.
2. 문자로만 넣을 수 있다. */
// 로그인에 성공했을 때 쿠키를 구워서 다시 보내준다.
response.addCookie(cookie);
}
}
기본 기한이 1년인 것을 확인할 수 있다.
그럼 저 기한을 우리가 직접 설정해줄 순 없는걸까? - 가능하다.
// 우리는 쿠키에게 나이를 정해줄 수 있다. cookie의 기한 설정 : 초(sec)로 계산
cookie.setMaxAge(365*24*60*60); // 365일 * 24시간 * 60분 * 60초
이 코드를 Cookie cookie와 response사이에 삽입하고 재실행해보면,
변함이 없어보이지만 변했다고 한다.(?ㅋㅋㅋㅋㅋㅋ)
오.. 에딧쿠키의 단점 발견.. 브라우저를 껐다 켜니 에딧쿠키에 남아있어야할 쿠키가 없어졌다(?)
쿠키 보는 다른 방법.
새로운 서블릿을 또 만들어줍시다. → SelectCookie.java
package com;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/SelectCookie")
public class SelectCookie extends HttpServlet {
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
Cookie[] cookies = request.getCookies();
// 쿠키는 하나만 생길 수도 있지만 어느 사이트 하나만 다녀와도 굉장히 많은 양의 쿠키가 생성된다. 그러므로 배열로 저장하게 되는 것.
for (int i = 0; i < cookies.length; i++) {
System.out.println(cookies[i].getName()+"/"+cookies[i].getValue()); //getName() : 쿠키의 이름, getValue() : 쿠키의 값.
}
}
}
자, 그럼 이제 쿠키를 삭제해봅시다.
하지만 아쉽게도 쿠키는 삭제하는 방법(method)이 없습니다. 그럼 어떻게 할까요?
- 새로운 쿠키를 만들어서 덮어씌우는 방식으로 삭제하는 편법을 사용하면 가능하다. → DeleteCookie.java
package com;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/DeleteCookie")
public class DeleteCookie extends HttpServlet {
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
Cookie cookie = new Cookie("id", ""); //name은 id, 쿠키는 삭제할 것이므로 값은 아무거나 넣거나 넣지 않아도 무관.
cookie.setMaxAge(0); //쿠키의 나이를 0세로.
response.addCookie(cookie); //쿠키를 보내줘야하므로 response.
}
}
잘 삭제된 것을 확인할 수 있다.
cookie의 단점
text형태로 제작.
도메인 갯수만큼 가능.
실제로는 서버에 저장하는 Session을 더 많이 사용한다.
'K-디지털 빅데이터 분석서비스 개발자과정 20.11.02~21.04.12 > JAVA' 카테고리의 다른 글
21.01.13. JSP&Servlet - Session 정보 지우기, 방문자수 올리기 (1) | 2021.01.14 |
---|---|
21.01.12. JSP&Servlet - Cookie, Session (0) | 2021.01.12 |
21.01.06. JSP & JDBC (0) | 2021.01.06 |
21.01.04. JSP (0) | 2021.01.05 |
20.12.31. Servlet (0) | 2021.01.04 |