세션과 쿠키 관련
세션과 쿠키
세션과 쿠키를 사용하는 목적은 HTTP 프로토콜에서 상태를 지속시키기 위해서 이다. HTTP 프로토콜에서는 새로운 페이지를 실행시켰을 때 페이지에 관련된 정보가 남아있지 않고 초기화 되기 때문이다.
이러한 특성 때문에 특정 정보를 남기기 위해서 여러 가지 방법들이 동원되고 있다.
- URL에 파라미터값 넘겨주기
- 숨겨진 필드 사용하기
- 쿠키사용하기
- 세션사용하기
이러한 방법들은 각기 장단점과 특성들이 있기 때문에 어느 하나만을 고집하여 사용할 수 없는 상태이다.
1. 쿠키
쿠키는 세션과는 다르게 클라이언트의 정보를 서버에 두지 않고 각자의 클라이언트에 두게된다. 따라서 서버의 자원을 소모하지 않고 특정 정보를 유지 시키기 위한 좋은 방법이다. 그러나 몇가지 단점이 노출되는데, 이는
- 보안에 노출되어 있고,
- 사용자 브라우저에서 쿠키를 사용하지 않게 설정된다면 쿠키는 저장되지 않는다.
이러한 문제점을 염두해 두고 쿠키를 사용하길 바란다.
1) 주요 메소드
| Cookie.setValue(value) | 쿠키의 값을 지정한다. |
| Cookie.getValue() | 쿠키의 값을 가져온다. |
| response.addCookie(cookie) | 쿠키를 전송한다. |
| request.etCookie() | 쿠키를 가져온다. |
| Cookie.setMaxAge(second) | 쿠키의 생존시간을 정한다. second > 0 : 정해진 시간동안 생존 second = 0 : 쿠키 삭제 second <0 : 부라우져가 끊어질때 까지 생존 |
| Cookie.getName() | 쿠키의 이름을 가져온다. |
2) 쿠키 생성
쿠키는 javax.servlet.http 패키지 안에 Cookie클래스를 사용하여 작업한다.
| 쿠키 생성 및 설정 | Cookie myCookie = new Cookie("cookie_name", "cookie_value") |
| 쿠키 재설정 | myCookie.setValue("cookie_value"); |
| 쿠키 전송(저장) | response.addCookie(myCookie); |
3) 쿠키 사용
| 쿠키 가져오기 | Cookie[] cookie = request.getCookies() |
| 쿠키 이름 읽기 | cookie[i].getName() |
| 쿠키 정보 사용 | cookie[i].getValue() |
4) 사용예
쿠키를 생성하고 저장한다.
|
저장된 쿠키를 보여준다.
|
2. 세션(Session)
세션은 page지시자의 session 속성이 기본적으로 true값으로 되어 있기 때문에 사용자는 일반적으로 별도의 조치 없이 세션을 바로 생성하여 사용할 수 있도록 되어 있다.
|
|
세션관련 프로그래밍을 하기 전에 세션이 차지하고 있는 위치를 그림으로 살펴보자. 세션 영역은 사용자 마다 별도로 서버영역에 생성되며, 값은 서로 공유되지 않는다. 세션의 유지시간은 사용자가 별도로 지정할 수 있으며 기본값은 30분으로 지정되어 있다. 물론 시간내에 사용자가 다를 웹페이지로 이동하거나, 브라우저를 종료하면 바로 세션이 삭제되어 세션 정보를 안전하게 보호할 수 있다. |
1) 세션 사용
|
<%@page session="true"%> |
특별한 경우가 아니면 굳이 사용할 필요가 없다. 기본값으로 셋팅되어 있기 때문이다.
2) 세션 생성하기
|
3) 세션 가져오기
|
세션영역에 값을 저장할 때는 특별한 데이터 형이 없이 Object형태로 저장되기 때문에 세션에서 값을 가져올때는 반드시 특정 데이터형으로 캐스팅해서 사용해야 한다.
4) 세션정보 파괴하기(세션종료)
|
invalidate()로 세션을 강제로 파괴할 수도 있지만, 브라우저를 닫거나, 다른 페이지로 이동할 때 그리고 세션타임아웃이되어도 세션이 파괴되어 세션에 저장된 값이 모두 삭제된다.
5) 세션 옵션 설정하기
|

위의 결과는 실행할 때 마다 달라진다.
