쿠키와 세션
쿠키
이름과 값의 쌍으로 구성된 작은 정보
한글은 url 인코딩 필요
서버에서 생성후 전송, 브라우저에 저장하고 유효기간 이후 자동삭제
서버에 요청시 domain, path가 일치하는 경우에만 자동전송(하위경로 포함)

쿠키 생성
Cookie cookie = new Cookie( "id" , "aaa" ); :: 쿠키 생성
cookie.setMaxAge( 60*60*24); :: 유효기간(24H)
cookie.setPath("/"); :: 쿠키를 찾을 경로
response.addCookie(cookie); :: 응답에 쿠키 추가
쿠키 삭제
Cookie cookie = new Cookie( "id" , "의미없다." ); :: 변경할 쿠키와 같은 이름의 쿠키 생성
cookie.setValue(URLEncoder.encode("으하하"); :: 값의 변경
cookie.setDomain("www.ggg.co.kr"); :: 도메인 변경
cookie.setMaxAge(0); :: 유효기간(0)
response.addCookie(cookie); :: 응답에 쿠키 추가
쿠키 읽어오기( 없으면 null )
Cookie[] cookies = request.getCookies();
for( Cookie cookie : cookies){
String name = cookie.getName();
String value = cookie.getValue();
System.out.printf(" name=%s , value=%s%n" , name, value );
}
매개변수로 cookie 값 가져오기
public String login( @CookieValue("id") String cookieId ){}
public String login( @CookieValue("JSESSIONID") String sessionId ){}
세션 객체는 브라우저가 종료되면 다시 사용할 수 없지만
쿠키는 브라우저 종료에 상관없이 유효 시간 내에 데이터를 유지할 수 있습니다.
쿠키는 브라우저에 저장되기 때문에 서로 다른 브라우저는 다른 쿠키를 가지고 있고 서로 정보를 교환할 수 없습니다.
쿠키 객체 수정과 무효화 메소드 | 설명 |
void setMaxAge(int expiry) | 쿠키의 유효 시간 설정 (0으로 할 경우 무효화) |
int getMaxAge() | 쿠키의 유효 시간 반환 |
void setPath(String uri) | 쿠키 사용의 유효 디렉토리 설정 |
String getPath() | 설정된 유효 디렉토리 반환 |
void setValue(String newValue) | 쿠키의 값을 수정 |
String Cookie.getName() | 쿠키의 이름 반환 |
void setVersion(int v) | 쿠키의 버전 정보 설정 |
int getVersion() | 쿠키의 버전 정보 반환 |
void setComment(String purpose) | 쿠키에 코멘트 설정 |
String getComment() | 쿠키의 코멘트 반환 |

JSP/서블릿끼리 쿠키 객체를 전달
Cookie cookie = new Cookie("name", "value");
request.setAttribute("cookie", cookie);
Test test = new Test(request);
클라이언트에게 쿠키(Cookie) 전달
생성 , 쿠키의 값을 변경, 유효시간은 0으로 설정 후에도 response 객체에 다시 담아줘야 합니다.
response 객체의 쿠키 관련 메소드 | 설명 |
void addCookie(Cookie cookie) | response 객체에 쿠키를 첨부함 |
<%
// 생성하고 담아 주기
Cookie idCookie = new Cookie("id", "codevang");
Cookie nameCookie = new Cookie("name", "servlet");
response.addCookie(idCookie);
response.addCookie(nameCookie);
// 수정 후 다시 담아서 보내야 한다.
idCookie.setMaxAge(0); // 무효화
nameCookie.setValue("JSP"); // 값 주정
response.addCookie(idCookie);
response.addCookie(nameCookie);
%>
세션 ( 없으면 null )
- 서로 관련된 요청을 하나로 묶은것( 쿠키 : 묶기 위해서 쿠키 이용 )
- 브라우저 마다 개별 저장소를 서버에서 제공
- session=false( 생성을 새로 하지 않는다 ) , session=true(새로운 세션 시작)
1. 세션 false : 세션이 필요없는 jsp 파일 → <%@ page session="false" %>
2. 세션 false : 기존 세션에 영향 없음
3. 세션 false 일때 sessionScope 와 pageContext.session 사용 불가
pageContext.request.session.getAttribue("id") 로 변경해야 한다.
4. false 사용 예시: index 페이지, 로그인 페이지
- <form action="<c:url value='/login/loginCheck'/>" method="post" >
<li><a href="<c:url value='/login/loginForm'/>">login</a></li>
쿠키를 허용하지 않는 브라우저는 요청 url 뒤에 세션 id 다 붙여주어야 된다..
url 붙여주면 자동으로 세션id를 붙여서 서버에 요청한다.

메서드 | 설명 |
String getId() | 세션 id 반환 |
long getLastAccessedTime()
|
세션 내에서 최근 요청받은 시간 반환 |
boolean isNew() | 새로 생성된 세션인지를 반환 |
request.getSession() | 호출 후 사용 |
void invalidate() | 세션 객체를 제거( 저장된객체 같이 제거 ) |
void setMaxInactiveInterval( int interval ) | 지정시간(초) 이후 세션 종료 |
int getMaxInactiveInterval()
|
예약된 세션 종료 시간 반환 |
속성관련 메서드 | 설명 |
void setAttribute( String name, Object value ) | 지정된 값을 지정된 속성이름으로 저장 |
Object getAttribute( String name )
|
지정된 이름으로 저장된 속성값 반환 |
void removeAttribute( String name ) | 지정된 이름의 속성 삭제 |
Enumeration getAttributeNames() | 기본 객체에 저장된 모든 속성이름 반환 |
세션 등록
HttpSession session = request.getSession(); :: 세션
session.setAttribute("id", id);
세션 수동 종료
HttpSession session = request.getSession();
session.invalidate(); :: 세션즉시 종료
session.setMaxInactiveInterval(30*60); :: 예약종료 30분후
자동 종료 tomcat > web.xml ( 분 단위 )
<session-config>
<session-timeout>30</session-timeout>
</session-config>

쿠키
|
세션
|
브라우저에 저장
|
서버에 저장
|
서버 부담x
|
서버 부담0
|
보안 불리함
|
보안에 유리
|
서버 다중화에 유리
|
서버 다중화에 불리함
|