👀 세션(Session)이란?

☑️ 서버랑 클라이언트와의 관계(상태)를 유지하기 위해서 사용하는 값

  • HTTP 프로토콜은 상태가 유지되지 않기 때문에 요청에 대한 응답이 한 번씩 이뤄지고 나면 그 관계가 소멸된다.
  • 하지만 이런 방식으로는 사용자가 회원 사이트에 로그인 했을 때 지속적으로 업무를 볼 수 없게 된다.
  • 그래서 사용자가 지속적으로 업무를 볼 수 있도록 서버와 클라이언트간의 관계를 일정 시간동안 유지해주기 위해 쓰는 것이 세션이다.
  • 세션객체(영역)는 브라우저당 1개씩 생성된다.

🔸 세션 메소드

  • 세션값 생성 : session.setAttribute("이름", 값);
  • 세션값 사용 : session.getAttribute("이름");
  • 세션값 제거 : session.removeAttribute("이름");
  • 세션값 초기화 : session.invalidate();
    • ❗️ 세션값 제거 메소드를 통한 부분제거보다는 세션값 초기화를 시켜야 한다.
    • 일부만 제거하면 사용자가 로그아웃 했는데 로그인 했을 때와 같은 행동이 일부 가능할 수 있다.


👀 쿠키(Cookie)란?

  • 클라이언트 측에서 관리되는 정보
  • 사용 가능한 기간동안 하드디스크에 저장되기 때문에 웹 브라우저가 사라져도 사용이 가능하다.
  • 하지만 그만큼 보안적으로 취약하다. (그래서 보안이 필요한 정보는 세션 사용)

🔸 쿠키 생성 절차

1. 쿠키 생성

2. 쿠키가 필요로 하는 설정값 저장(유효기간, 설명, 도메인, …)

3. 웹 브라우저에 생성된 쿠키 정보 전달

4. 웹 브라우저 요청에서 쿠키를 얻어온다.

5. 쿠키 정보는 이름, 값의 데이터 쌍으로 형성된다.

6. 쿠키 이름을 사용해서 해당 값을 사용한다.

🔸 쿠키 사용 방법

1) HTTP 헤더 정보 사용 - 안씀 XX

2) 서블릿 API 사용 - 현재 쓰는 방식

  • 쿠키 생성하는 예제 코드
<%
    // 쿠키값 생성 - 서블릿 API 사용
    Cookie cookie = new Cookie("name", "CookieValue"); // HDD 저장X, 메모리에만 있는 상태
		
    // 쿠키값 설정 - 유효기간 설정
    cookie.setMaxAge(600); // 초 단위 - 10분
		
    // 쿠키값을 저장(응답정보(response)에 저장)
    response.addCookie(cookie);
    System.out.println("쿠키정보가 전달 완료시 사용자의 HDD에 저장");
%>
  • 먼저 쿠키를 생성한 다음 클라이언트에게 전송한다.

  • 쿠키값 가져오는 예제 코드

<%
    // 쿠키값 가져오기(request - 요청정보로부터 꺼내오기)
    Cookie[] cookies = request.getCookies();
			
    if (null != cookies) // !!배열을 반복문 돌리기 전에 예외처리 꼭 하기!!
    {
        for (int i = 0; cookies.length > i; i++)
        {
            //System.out.println(cookies[i]);
            if (cookies[i].getName().equals("name"))
            {
                // Cookie cookie = new Cookie("name", "CookieValue"); // HDD 저장X, 메모리O
                // ⬆️ 얘를 가져올 것임
                // 이름이 같다면 내가 직접 생성한 쿠키임
                System.out.println(cookies[i].getValue());
						
                out.print("쿠키명: " + cookies[i].getName() + "\n");
                out.print("쿠키값 : " + cookies[i].getValue());
            }
        }
    }
%>
  • 그 다음 클라이언트 측에서 쿠키를 가져온다.
  • 쿠키값을 가져올 때엔 꼭 예외처리를 해서 null값이 아닐 때에만 가져오는 동작을 수행하도록 해야한다.