http protocol의 특징client가 server에 요청server는 요청에 대한 처리를 한 수 client에 응답client와 server가 연결 상태를 유지해야 하는 경우 문제가 발생(로그인 정보 등..)client단위로 상태 정보를 유지해야 하는 경우 Cookie와 Session이 사용된다Http protocol의 특징(약점)을 보완하기 위해 사용request시 Request Header에 넣어 자동으로 서버에 전송key와 value로 구성되고 String 형태로 이루어져 있음Browser마다 저장되는 쿠키는 다르다 (서버에서는 Browser가 다르면 다른 사용자로 인식)client의 컴퓨터에 저장되므로 각 쿠키를 구별하는 데 사용되는 이름Client가 페이지를 요청WAS는 Cookie를 생성HTTP Header에 Cookie를 넣은 응답Browser는 넘겨받은 Cookie를 PC에 저장하고, 다시 WAS가 요청할 때 요청과 함께 Cookie를 전송Browser가 종료되어도 Cookie의 만료 기간이 남아 있다면 Client는 계속 보관Client의 PC에 해당 Cookie가 있는 경우, 요청 페이지와 함께 Cookie를 전송
| 기능 | method |
|---|---|
| 생성 | Cookie cookie = new Cookie(String name, String value); |
| 값 변경/얻기 | cookie.setValue(String value); / String value = cookie.getValue(); |
| 사용 도메인지정/얻기 | cookie.setDomain(String domain); / String domain = cookie.getDomain(); |
| 값 범위지정/얻기 | cookie.setPath(String path); / String path = cookie.getPath(); |
| cookie의 유효기간지정/얻기 | cookie.setMaxAge(int expiry); / int expiry = cookie.getMaxAge(); |
| cookie 삭제 : cookie.setMaxAge(0); | |
| 생성된 cookie를 client에 전송 | response.addCookie(cookie); |
| client에 저장된 cookie 얻기 | Cookie cookies[] = request.getCookies(); |
WAS의 memory에 Object의 형태로 저장memory가 허용하는 용량까지 제한 없이 저장 가능site 내에서 화면을 이동해도 로그인(사용자 정보)이 풀리지 않고 유지Request-Header 필드인 Cookie를 확인하여, 클라이언트가 해당 session-id를 보냈는지 확인session-id가 존재하지 않는다면, 서버는 session-id를 생성해 클라이언트에게 돌려준다session-id를 쿠키를 사용해 서버에 저장. 쿠키 이름 : JSESSIONIDJSESSIONID)를 이용하여 session-id 값을 서버에 전달Session ID를 부여한다Session ID로 클라이언트를 구분하여 각 클라이언트 요구에 맞는 서비스 제공Browser당 하나의 JSESSIONID를 할당 받음session에 저장하면 DB를 접근할 필요가 없으므로 효율적이다
| 기능 | method |
|---|---|
| 생성 | HttpSession session = request.getSession(); |
| HttpSession session = request.getSession(false); | |
| 값 저장 | session.setAttribute(String name, Object value); |
| 값 얻기 | Object obj = session.getAttribute(String name); |
| 값 제거 | session.removeAttribute(String name); // 특정 이름의 속성 제거 |
| session.invalidate(); // binding되어 있는 모든 속성 제거 | |
| 생성 시간 | long ct = session.getCreationTime(); |
| 마지막 접근 시간 | long lat = session.getLastAccessedTime(); |
| Session | Cookie | |
|---|---|---|
| Type | jakarta.servlet.http.HttpSession (Interface) | jakarta.servlet.http.Cookie (Class) |
| 저장 위치 | Server의 memory에 Object로 저장 | Client 컴퓨터에 file로 저장 |
| 저장 형식 | Object는 모두 가능 (일반적으로 Dto, List등 저장) | file에 저장되기 때문에 String 형태 |
| 사용 예 | 로그인 시 사용자 정보, 장바구니 등 | 최근 본 상품 목록, 아이디저장(자동로그인), 팝업메뉴에서 ‘오늘은 그만 열기’등 |
| 용량 제한 | 제한 없음 | 도메인당 20개, 1쿠키당 4KB |
| 만료시점 | 알 수 없음 (Client가 로그아웃 하거나, 일정 시간동안 session에 접근 하지 않을 경우 [만료 시간은 web.xml에 설정] | 쿠키 저장 시 설정 (설정이 없을 경우 Browser 종료시 만료) |
| 공통 | 전역에 저장하기 때문에 project내의 모든 JSP에서 사용가능 | |
| Map형식으로 관리하기 때문에 key값의 중복을 허용하지 않는다 |