JSP & Servlet/개념

[JSP & Servlet] 세션(Session)

여승철 2022. 3. 25. 17:53
반응형

 

📌세션(Session) 이란?


세션의 개념을 이해하기 위해선 HTTP 프로토콜의 특성부터 이해해야 한다.

HTTP 프로토콜의 대표적인 특징 중의 하나는 상태를 유지하지 않는 것이다.

즉, 클라이언트가 한 번 요청을 하고 서버에서 응답을 하면 해당 클라이언트와 서버와의 연결은 유지되지 않는다는 특징이 있다. 쉽게 설명하면 클라이언트가 첫 번째 요청을 보내고 서버가 이에 대한 답을 하고 똑같은 클라이언트가 두 번째 요청을 했을 때 서버에서는 두 번째 요청을 한 클라이언트가 첫 번째 요청을 한 클라이언트임을 인식하지 못한다. 

 

 

 

 

 

💡HTTP 프로토콜의 요청 흐름

 

 

 HTTP 프로토콜의 상태를 유지하지 않는 특징 때문에 로그인, 장바구니 담기 등 상태가 유지되어야 하는 프로그램은 작성하기가 힘들다.

 

이러한 단점을 보안할 수 있는 것이 바로 세션이다.

세션은 Servlet 에서 클라이언트와 서버의 상태를 유지하기 위해 제공되는 API이다.

 

 

 

 

 

 

💡세션(Session) 기능이 적용된 HTTP 프로토콜 요청 처리 순서

1. C→S 클라이언트의 첫 번째 요청
2. C←S 첫 번째 요청에 대한 응답 + 세션 아이디
3. C 쿠키에 세션 아이디 저장
4. C→S 두 번째 요청 + 쿠키에 저장된 세션 아이디
5. S 서버는 쿠키에 전송된 세션 아이디를 확인하고 두 번째 요청을 한 클라이언트가 첫 번째 요청을 한 클라이언트임을 인식한다.

 

흐름

 

세션 기능을 이용하면 클라이언트의 요청에 대한 응답을 할 때 서버에서는 중복되지 않는 세션 아이디를 클라이언트마다 부여해서 응답에 같이 보낸다. 그리고 이 세션 아이디는 클라이언트의 쿠키 저장소에 저장되게 되고 클라이언트가 다시 요청하면 이 세션 아이디가 요청에 같이 전송 된다. 서버는 요청에 전송되어오는 세션 아이디를 판별하여 두 번째 요청을 한 클라이언트가 첫 번재 요청을 한 클라이언트임을 확인할 수 있다.

 

 

 

 

 

 

 

📌세션(Session) 사용법


Servlet에서는 세션을 다룰 수 있는 HttpSession 인터페이스를 제공하고 있다.

 

 

  • HttpServletRequest.getSession(true)
    이미 세션이 있다면 그 세션을 돌려주고, 세션이 없으면 새로운 세션을 생성한다.

  • HttpServletRequest.getSession(false)
    이미 세션이 있다면 그 세션을 돌려주고, 세션이 없으면 null을 돌려준다(에러 발생).

  • HttpSession.setAttribute("Key",Value)
    "Key"를 사용하여 객체를 세션에 바인딩한다.
    Value는 값으로 들어올 자료형을 예측할 수 없기 때문에 Object형으로 upcasting하여 모두 받아낸다.

    ex) HttpSession session = request.getSession();
          session.setAttribute("name","여승철");


  • HttpSession.getAttribute("Key")
    "Key"로 바인딩된 객체를 돌려주고, "Key"로 바인딩된 객체가 없다면 null를 돌려준다.
    Value는 세션을 저장할 대 Object형으로 upcasting했으므로, 가져올 댄 원래대로 downcasting해야한다.

    ex) HttpSession session = request.getSession();
          String name = (String)session.getAttribute("name");

 

 

 

 

예제

- 세션(Session) 기능을 사용한 로그인 프로그램

 

login.jsp

 

 

 

 

Servlet

SessionLoginServlet.java

 

39 : 아이디와 비밀번호가 java이면 인증되었다고 가정한다. 

40~41 : 인증이 되었을 때 id라는 이름의 속성 값을 세션 영역에 생성한다.

42~43 : 요청 처리 페이지를 menu.jsp로 포워딩 한다.

46~49 : 로그인 실패했을 대 자바 스크립트로 경고 메시지를 출력해주고 인증하는 페이지로 돌아간다.

 

※ RequestDispatcher

Javax.servlet 패키지에 존재하는 RequestDispatcher 인터페이스는 특정 페이지로 포워딩하는 기능이 정의되어 있다. 모델 2로 작업을 할 때 자주 사용하는 인터페이스로 생성할 때 파라미터 값으로 포워딩될 URL이 온다.

그리고 43 줄에서 forward() 메서드가 호출될 때 실질적으로 해당 URL로 포워딩이 이루어진다.

 

 

 

 

 

JSP

menu.jsp

Servlet에서session 객체를 사용하기 위해서 위 서블릿 파일 예제와 같이 HttpSession session = request.getSession() 를 하여 세션 객체를 수동으로 생성해 주어야 한다.

하지만 JSP에서는 세션 객체를 자동으로 생성해주기 때문 생성하는 코드 없이 위 menu.jsp 처럼 session객체를 바로 사용 가능하다.

 

 

 

 

결과

 

 

아이디 : qwer
비밀번호 : 1234

입력 후 [로그인] 클릭

 

 

 

아이디 : java

비밀번호 : java

입력 후 [로그인] 클릭

 

 

 

반응형