세션의 특징
-정보가 서버의 메모리에 저장됨
-브라우저의 세션 연동은 세션 쿠키를 이용한다.
-쿠키보다 보안에 유리함
-서버에 부하를 줄 수있다.
-브라우저(사용자)당 한 개의 세션 (세션id)이 생성된다.
-세션은 유효 시간을 가진다. (기본 유효 시간은 30분이다.)
-로그인 상태 유지 기능이나 쇼핑몰의 장바구니 담기 기능 등에 주로 사용함
실행과정
1)클라이언트(사용자) 최초 접속
2)서블릿 세션 객체 생성 후 세션 객체에 대한 세션 id를 브라우저에 전송
3)브라우저는 세션 id 세션 쿠키에 저장 (쿠키이름 jessionId)
4)클라이언트(사용자) 재접속
5)세션 쿠키에 저장된 세션id 서버 재전송
6)세션 id를 이용해 브라우저의 세션 객체에 접근
7)브라우저에 대한 작업 수행
세션 API
서블릿에서 세션을 이용하려면 HttpSession 클래스 객체를 생성해서 사용해야 한다
HttpSession 객체는 HttpServletRequest의 getSession() 메서드를 호출해서 생성한다
// getSession() 메서드를 호출
private void doHandle(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setContentType("text/html;charset=utf-8");
PrintWriter out =resp.getWriter();
HttpSession session = req.getSession();
getSession( )메서드 종류
- getSession( ) : 기존의 세션 객체가 존재하면 반환하고, 없으면 새로 생성
- getSession(true) :기존의 세션 객체가 존재하면 반환하고, 없으면 새로 생성
- getSession( false) : 기존의 세션 객체가 존재하면 반환하고, 없으면 null을 반환
HttpSession 클래스 메서드
메서드 설명 반환타입
getAttribute(String name) | 속성 이름이 name인 속성 값을 object 타입으로 반환. 없을 경우 null반환 | Object |
getAttributeNames() | 세선 속성 이름들을 Enumeration 객체 타입으로 반환 | Enumeration |
getCreationTime() | 1970년 1월 1일 0시 0초를 기준으로 현재 세션이 생성된 시간까지 경과한 시간을 계산하여 1/1000초 값으로 반환 | long |
getId() | 세션에 할당된 고유 식별자를 반환 | String |
getMaxInactiveInterval() | 현재 생성된 세션을 유지하기 위해 설정된 세션 유지 시간을 반환 | int |
invalidate() | 현재 생성된 세션을 소멸시킴 | void |
isNew() | 최초로 생성된 세션인지 판별 | boolean |
removeAttribute(String name) | 세션 속성 이름이 name인 속성을 제거 | void |
setAttribute(String name, Object value) | 세션 속성 이름이 name인 속성에 속성 값으로 value를 할당 | void |
serMaxInactiveInterval(int interval) | 세션을 유지하기 위한 세션 유지 시간을 초 단위로 설정 | void |
예제
@WebServlet("/sanha")
public class SessionTest extends HttpServlet{
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setContentType("text/html;charset=utf-8");
PrintWriter out =resp.getWriter();
HttpSession session = req.getSession(); // getSession()을 호출하여 최초 요청 시 세션 객체를 새로 생성하거나 기존 세션을 반환함
out.println("세션 아이디 :" + session.getId()+"<br>"); //session.getId를 이용하여 생성된 객체의 id를 가져옴
if(session.isNew()) { //session.isnew()를 이용하여 새로운 새로운 세션(true값이면 )이 만들어지면 문자열 출력
out.print("새로운 세션이 만들어짐 !!!");
}
}//end doGet
}//end class
결과
같은 브라우저로 재 접속
—> 새로운 세션이 만들어짐 문자가 출력되지 않는다.
—> 서블릿에서 생성된 세션 id가 브라우저로 전송되어 세션 쿠키에 JsessionID 쿠키이름으로 저장이 된 것을 확인할 수 있다.
'Programming > Back-end Language' 카테고리의 다른 글
[JAVA] Servlet 로그인 페이지 만들기 (1) (1) | 2022.01.05 |
---|---|
[JAVA] 서블릿 경로설정과 Cycle (0) | 2022.01.04 |
[JAVA] 서블릿 (GET/POST)전송방식 (0) | 2022.01.04 |
[JAVA] JSP (Java Server Pages) 란 무엇인가? (0) | 2022.01.04 |
[JAVA] Session이란?(2) (0) | 2022.01.04 |