반응형

# MVC06_03 세션이란 무엇인가_1 (request 바인딩의 한계)

  • 클라이언트가 로그인 시 회원인증컨트롤러에서 로그인한 정보를 검토하여 회원 인증 로그인 성공/실패 처리. 이때 로그인 성공 여부를 특정 메모리에 기록
  • 회원 인증이 성공한 후에 서비스가 진행되는데, A.jsp, B.jsp, C.jsp가 존재할 때 로그인 성공여부를 알 수 있는 방법은 위에서 특정 메모리에 기록한 내용을 바탕으로 확인 할 수 있다.

1. 문제점

  • A.jsp, B.jsp, C.jsp 페이지는 회원 인증이 성공한 후에 서비스가 진행되어야 하는데... 그런데 회원인증 페이지를 거치지 않고 A.jsp, B.jsp, C.jsp 페이지에 접근하는 경우(URL에 해당 페이지로 바로 접근)도 발생할 수 있다. 
  • 그래서 A.jsp, B.jsp, C.jsp 페이지에는 페이지 상단 부분에 회원인증여부를 판단(체크)할 수 있는 코드가 들어가 있어야 한다.
  • 특정 메모리에 기록한 내용을 HttpServletRequest 이용 객체 바인딩하게 되면 RequestDispatcher rd = request.getRequestDispatcher(); 로 포워딩 하게 되는데, 이렇게 되면 A.jsp 또는 B.jsp 또는 C.jsp 각 하나의 페이지에서먼 회원인증을 체크할 수 있다. 

2. 해결방법

  • HttpServletRequest 객체를 이용해서는 해결이 되지 않으나, HttpSession 객체를 이용하면 회원인증 여부를 여러 페이지에서 확인할 수있다.

## 세션에 로그인 대상 정보 넣기

  • 회원 로그인 기능에서 로그인 성공 시 세션에 아래와 같이 로그인 정보를 담는다.
1. 세션에 로그인 정보 설정 방법 1.
HttpSession session = request.getSession();		// 세션을 가져와서 
session.setAttribute("userId", user_id);
session.setAttribute("userName", user_name);

2. 세션에 로그인 정보 설정 방법 2.
request.getSession().setAttribute("userId", user_id);
request.getSession().setAttribute("userName", user_name);

위 2가지 방법은 모두 동일한 코드.

 

# MVC06_04 세션이란 무엇인가_2

## 세션

1. 초기 방문 시

  • 클라이언트가 서버에 요청해서 서버에 접속하면 서버에 해당 클라이언트에 대한 정보가 서버의 특정 공간에 남게 되고, 클라이언트를 식별하기 위해 서버에서 정보(접속 아이디, 비밀번호 등 식별정보)가 담긴 쿠키(흔적, 쿠키 정보는 브라우저캐쉬메모리에 저장)를 넘긴다. 이때 서버와 클라이언트를 연결해주는 세션이 존재.

2. 두번째 방문 시

  • 클라이언트가 서버에 요청 시 클라이언트에서 만들어졌던 쿠키 정보를 서버쪽에서 가져와야 하는데, 이때 서버에서는 reqeust 객체에 해당 쿠키 정보가 담기게 된다.
  • 그래서 클라이언트와 서버간에 쿠키정보를 이용하여 식별 하게 된다.

 

# MVC06_05 세션이란 무엇인가_3

## 세션 (프로그램적으로 설명)

  • 세션은 고유한 연결라인.
  • 동일한 브라우저에서의 요청인 경우에는 세션이 동일(세션 유지)하다.

1. 초기 방문 시

  • 클라언트가 서버에 처음 방문 시, 서버는 클라이언트를 식별하기 위해 HttpSession 객체(메모리 공간)를 생성하고 해당 클라이언트가 사용할 수 있도록 고유한 번호인 SessionId 생성(영숫자의 조합 32자) 한다.
  • 그리고 생성된 SessionId를 접속한 클라이언트에게 전달 한다. (이 값이 바로 쿠키Cookie, 브라우저로 접속했을 경우 쿠키는 브라우저 메모리에 저장 된다.)
  • 서버에서 해당 클라이언트가 처음 접속 하는건지 두번째 접속하는 건지는 클라이언트로부터 넘어오는 값으로 판단.

2. 두번째 방문 시

  • 클라이언트가 서버에 방문 시 쿠키 값이 서버로 넘어가게 된다.
  • 그래서 클라이언트와 서버간에 쿠키정보를 이용하여 식별하게 된다.

## 추가 설명

1. request.getSession();

  • 클라이언트 접속 시 클라이언트에서 넘어오는 쿠키값 존재 여부 확인을 위해 HttpSession session = request.getSession(); 진행.
  • 클라이언트로부터 넘어오는 값이 존재하면 HttpServletRequest에 해당 쿠키 값이 담기게 되고, 서버는 HttpSession session = request.getSession(); 으로 HttpServletRequest에 존재하는 쿠키 값을 가리킨다.
  • 클라이언트로부터 넘어오는 값이 존재하지 않으면 HttpSession 객체를 생성하고 여기에 고유한 아이디 값(SessionId) 을 생성하게 된다. 그래서 해당 쿠키값을 클라이언트에게 내려보내주면 클라이언트와 서버의 세션(고유한 라인)이 성립되게 된다.

2. 객체 바인딩

  • 회원 인증 성공에 대한 사실을 계속 추적할 수 있도록 session.setAttribute로 객체 바인딩을 진행.
반응형

+ Recent posts