
지속적인 연결 유지로 인한 자원 낭비 방지를 위해 연결 해제
연결이 해제되면 서버는 클라이언트 정보를 알 수 없음
이러한 문제의 해결 방안 => Cookie, HttpSession 활용
서버가 생성하는 클라이언트 정보를 가지고 있는 파일
클라이언트 컴퓨터에 저장되며, 필요에 따라 요청 시 서버로 같이 전송된다.
key-value 형태로 구성되며, 문자열 데이터이다.
브라우저(클라이언트) 별로 별도의 쿠키가 생성된다. (브라우저가 다르면 다른 사용자로 처리)
세션관리(사용자 아이디, 접속시간, 장바구니 등)을 위해 사용된다.
사용자마다 다른 페이지를 보여줄 수 있다.
사용자의 행동과 패턴을 분석하고 기록하는데 사용된다. (사용자가 클릭한 상품 관련 광고)
Clinet가 요청 생성
WAS는 Cookie를 생성하고 Http Header에 Cookie를 넣어 응답 (response에 넣어서 보내준다다는 뜻)
Client(Browser)는 Cookie를 저장, 해당 서버에 요청할 때 요청과 함께 Cookie를 전송
Cookie는 브라우저가 종료되더라도 계속 저장되기 때문에 (만료 기간 전까지) 동일 사이트 재 방문하여 요청 시 필요에 따라 Cookie가 재 전송된다.
Cookie는 브라우저 별로 생성 (새 브라우저(시크릿탭) 열면 사라짐)

이름(key), 값(value), 만료일(Expire data, 저장기간), 경로정보로 구성
클라이언트에 최대 300개의 쿠키 저장 가능
하나의 도메인 당 20개의 쿠키 저장 가능
쿠키 하나는 4KB (=4096byte) 까지 저장 가능 (최대 1.2MB)
이미지의 경우 어디 서버에 저장해놓고 거길가는 링크만 쿠키에 저장함. (사진은 용량이 크잖아)
class다. => new를 통해 직접 cookie 생성이 가능하다.
Cookie cookie = new Cookie("userid", "ssafy");
response.addCookie(cookie);

사용자가 웹 서버에 접속해 있는 상태를 하나의 단위보고 세션이라고 한다.
각 세션은 sessionid를 이용해 구분한다.
WAS의 메모리에 객체 형태로 저장
메모리가 허용하는 용량까지 제한없이 저장가능 (쿠키는 클라이언트에 저장해서 크기에 한계가 있었는데 세션은 서버에 저장해서 용량 제한 X)
쿠키는 클라이언트에 저장되기 때문에 공유 PC의 경우 보안에 취약할 수 있다. 하지만 세션은 서버에 저장되기 때문에 쿠키에 비해 보안이 좋다.
사용자(로그인) 정보 및 장바구니 등에 사용한다.
클라이언트가 페이지를 요청
서버는 쿠키에 session id가 있는지 확인
session id가 존재하지 않으면 session id를 생성해 쿠키에 쓴 다음 클라이언트로 반환
생성된 session id를 이용하여 서버 내 메모리를 생성
클라이언트가 다음 요청 시 쿠키에 session id(JSESSIONID)를 포함해 전달하면 서버내에 저장된 session id와 비교하여 데이터 조회

브라우저 당 하나의 JSESSIONID를 할당 받음
아이디 또는 닉네임과 같이 로그인했을 경우 자주 사용되는 정보를 session에 저장하면 db에 접근할 필요가 없으므로 효율적이다.

pageContent : JSP
request : 요청 단위
session : 브라우저 - 브라우저 다 끄면 session 사라진다
application : server 켜져있으면 계속 살아있음
page < request < session < application
이거 실습파일 scope에 있는거 해보기
요청 객체로부터 session 객체를 얻어온다.
session에 데이터를 설정하여 저장한다.
HttpSession session = request.getSession();
session.setAttribute("userid", "ssafy");
HttpSession : 인터페이스
String userid = (String)session.getAttribute("userid");
