FireDrago

[Servlet] 세션(Session) 본문

프로그래밍/Servlet

[Servlet] 세션(Session)

화이용 2023. 7. 7. 17:16

세션

  • 브라우저 (사용자)당 하나가 제공된다.
  • ServletContext : 애플리케이션당 하나 , Session : 사용자당 하나
  • 서버의 메모리에 저장되기때문에 서버의 부담이 발생할 수 있다.
  • 장바구니, 사용자추적 등 사용자마다 달라지는 데이터를 저장할때 사용한다.

 

세션 생성과정

  1. 클라이언트가 서버에 접속하면, 서버는 Session 객체를 생성
  2.  생성된 세션id를 브라우저 메모리의 세션쿠키에 저장한다. (쿠키형태)(jsessionID) 
  3. 브라우저가 접속할때마다 세션쿠키에 저장된 id를 서버에 전달
  4. 서버는 전송된 세션id를 이용해 세션에서 작업수행

 

세션 사용방법

  • 생성

HttpSession session = request.getSession();

HttpSession 클래스 객체의 생성은 HttpServletRequest의 getSession( ) 메서드를 사용한다.

 

  • 주요메서드
반환 타입 메서드 설명
Object getAttribute(String name) name을 가진 값을 가져온다
Enumeration getAttributeNames( ) 세션 속성의 이름들을 반환 (while 문과 자주 쓰인다.)
long getCreationTime( ) 생성 날짜를 Long으로 반환 ( 날짜 클래스로 바꿔주는게 좋다)
String getId( ) 세션 id 가져오기
int getMaxInactivInterval( ) 세션 유효기간 반환
void invalidate( ) 세션 소멸
boolean isNew( ) 원래 있던 세션인지, 새로 생성된 세션인지 알려준다. 
(신규회원인지 기존회원인지 확인)
void removeAttribute(String name ) name의 세션값을 삭제
void setAttribute
(String name, Object value)
세션속성 이름이 name인 속성에 속성 값으로 value 할당
void setMaxInactiveInterval
(int interval)
세션 유지시간을 '초'단위로 설정 (기본값 30분)

 

세션을 이용한 로그인

protected void doHandle(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    .....
    //세션 생성
    HttpSession session = request.getSession();
    
    //form에서 입력받은 id와 pw  가져오기
    String user_id = request.getParameter("user_id");
    String user_pw = request.getParameter("user_pw");
    
    
    if(session.isNew()) {
    	//세션을 처음 만들었는데, id가 입력된 경우 --> 세션에 등록 (가입)
        if (user_id != null) {
            session.setAttribute("user_id", user_id);
            out.print("<a href='login'>로그인 상태확인 </a>");
        }else {
        //세션을 처음만들었는데, id가 입력안됨 ---> 다시 로그인화면
            out.print("<a href='login2.html'> 다시 로그인하세요! </a>");
            session.invalidate();
            //세션 삭제
        }
    } else {
        user_id = (String)session.getAttribute("user_id");
        //세션이 원래 있었는데 id도 세션값과 일치 ----> 로그인
        if (user_id != null && user_id.length() != 0) {
            out.print("안녕하세요 " +user_id+"님!!");
        } else {
        //세션이 원래 있었는데 id가 세션과 불일치 ----> 다시 로그인 화면
            out.print("<a href='login2.html'>다시 로그인 하세요!!</a>");
            session.invalidate();
            //세션삭제
        }
    }