gi_dor

쿠키 본문

First/Spring

쿠키

기돌 2023. 5. 13. 19:41

 

1. 쿠키

이름과 값의 쌍으로 구성된 정보. 아스키 문자만 가능

이름 : 알파벳 + 숫자
값 : 공백, 세미콜론을 제외한 아스키 가능

  • 서버에서 생성 후 전송, 브라우저에 저장. 유효기간 이후 자동 삭제(수동 삭제도 가능하다.)
  • 서버에 요청 시 domain, path가 일치하는 경우(+ 하위 경로 포함)에만 자동 전송

https://catsbi.oopy.io/0c27061c-204c-4fbf-acfd-418bdc855fd8

 

쿠키 = 클라이언트 식별 기술
쿠키에는 도메인 정보, path, 유효기간 같은 정보가 들어있다.
IP로는 구별이 안 되기 때문에 쿠키를 사용하는 것이다.

 

2.쿠키의 작동 과정

처음에 클라이언트가 서버에게 요청. 서버가 코드를 수행해서 쿠키가 생성되고 응답 헤더에 쿠키를 넣어서 보낸다 

그럼 서버에서 보내준 쿠키가 브라우저에 저장된다.

https://devuna.tistory.com/23

그 뒤로 Client가 Server에 요청을 하게되면 자동으로 그 쿠키가 요청헤더에 함께 따라가게 되어있다. 그럼 서버쪽에서는 그 쿠키를 자기가 발급했으니까 한다. 이 클라이언트가 누군지 식별 가능.

쿠키는 브라우저에 저장하기 때문에 사용자가 쿠키를 삭제할 수도 있고 서버가 발급해주는 쿠키를 거부할 수도 있다

3. 쿠키 생성

전 세계에서 사용할 수 있기 때문에, 클라와 서버의 시간이 맞는다는 보장이 없다. 그래서 상대시간과 절대시간 둘 다 명시해준다.

	Cookie cook = new Cookie("id",id); // 쿠키 생성 ("name" , "value")
			cook.setMaxAge(60*60*24);	// 유통기한
			response.addCookie(cook);	// 응답헤더에 쿠키 추가

 

4.쿠키 삭제

서버에서 변경된 쿠키를 응답에 추가하면 새로운 쿠키를 브라우저가 받아서 똑같은 이름의 쿠키가 있으면
새로 받은 내용으로 갱신한다. 이 과정에서 삭제되는 것이다.

Cookie cookie = new Cookie("id", ""); // 삭제할 쿠키와 같은 이름 쿠키 생성
cookie.setMaxAge(0);                  // 유효기간을 0으로 설정(삭제)
response.addCookie(cookie);           // 응답에 쿠키 추가

 

5. 쿠키 읽기(가져오기?)

  • 쿠키가 여러개일 수 있기 때문에 배열로 받는다.
  • 쿠키가 없으면 null이라 null 체크해야 한다.
  • 호스트(Domain), path(경로)와 일치하는 쿠키를 찾아서 헤더에 넣어서 보내준다.
Cookie[] cookies = request.getCookies(); // 쿠키 읽기. 없으면 null이라 null체크 해야 한다.

for (Cookie cookie : cookies) {
    String name = cookie.getName();
    String value = cookie.getValue();

    System.out.printf("[cookie]name = %s, value = %s\n", name, value);
}

 

6. 실습

1. 브라우저에서 쿠키 만들기


2. 실습 뚜들겨 보기 
html css 못해서 이게 최선임..

if (rememberId) {
    Cookie cookie = new Cookie("id", id); 	 //  1. 쿠키를 생성
    response.addCookie(cookie); 	//  2. 응답에 저장
} else {
    // 쿠키를 삭제
    Cookie cookie = new Cookie("id", id);
    cookie.setMaxAge(0); // 유효기간
    response.addCookie(cookie);
}
	if (request.getParameter("check") != null) {
			ch = "checked"; 
			// 체크 된거 확인되었으니 쿠키 생성
			Cookie cook = new Cookie("id",id);
			cook.setMaxAge(60*60*24);
			response.addCookie(cook);
		}else {
			ch = "";
			// 체크 감별후 체크안되어 있다고 뜨면 
			// 쿠키  삭제해보기
			Cookie cook = new Cookie("id",id);
			cook.setMaxAge(0);
			response.addCookie(cook);
		}

 

728x90