반응형
- 가장 중요한 프로그램적 요소 : 인증과 권한
- 권한을 획득해야지 웹프로그램을 실행해줄지 말지 정해줌
1. 🖤세션(Session)
- 서버(웹프로그램)와 클라이언트(브라우저)의 연결 지속성을 제공하기 위해 서버에 저장되는 값(객체)
2. 🖤세션은 언제 사용?
- 보안 관련 정보(권한)를 저장할 목적으로 사용
- 접속한 클라이언트가 권한이 있는지 없는지 판단하여 맞는 기능 제공해줌
- 비로그인 사용자의 장바구니 만들 때 사용
- 왜? 세션은 클라이언트에서 조작이 불가능하기 때문
3. 🖤세션 이용 방법
- 세션 아이디(식별자)를 이용하여 클라이언트를 구분해 세션에 값(객체)을 저장하여 사용
- 세션 바인딩(Session Binding) : 세션을 웹프로그램에서 사용할 수 있도록 결합하는 작업
4. 🖤세션 바인딩은 WAS가 자동으로 해줌 어떻게?
- 클라이언트에서 JSSESIONID 이름의 쿠키를 제공하지 않을 경우
- 새로운 세션을 생성하여 바인딩 처리
- 생성된 세션의 아이디(식별자)를 JSSESIONID 이름의 쿠키값으로 저장하여 클라이언트에게 전달하여 저장
- 서버로부터 전달받은 JSSESIONID 쿠키를 클라이언트는 브라우저 메모리에 저장
- 브라우저 종료되면 소멸
- 클라이언트에서 JSSESIONID 이름의 쿠키를 제공받은경우
- 새로운 세션을 트렉킹하여 바인딩 처리
- 세션 트랙킹(Session Tracking) : JSSESIONID 이름의 쿠키값을 서버에 존재하는 세션의 아이디와 비교하여 검색하는 작업
- 새로운 세션을 트렉킹하여 바인딩 처리
5. 세션을 바인딩하여 클라이언트에게 바인딩된 세션정보를 전달하는 서블릿
🖤SessionServlet.java
- JSSESIONID 이름의 쿠키가 없다면 - 만들어서 바인딩
- JSSESIONID 이름의 쿠키가 있다면 - 트랙킹(비교검색)해서 바인딩
package xyz.itwill.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Date;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
@WebServlet("/sessoion.itwill")
public class SessionServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//1.
//클라야, response의 [Body]에 html 문서 줄게 (약속)
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
//2.🔥
//클라이언트에서 JSSESIONID 이름의 쿠키를 제공하지 않을 경우 새로운 세션을 생성하여 "바인딩 처리"
//클라이언트에서 JSSESIONID 이름의 쿠키를 제공받은경우 새로운 세션을 트렉킹하여 "바인딩 처리"
//HttpServletRequest.getSession() : 바인딩 처리된 세션(HttpSession 객체)을 반환하는 메소드
//=> 새로운 세션을 생성하여 바인딩하거나 기존 세션을 트랙킹하여 바인딩 처리
//HttpSession 객체 : 세션 정보를 저장한 Map 형식의 객체
//=> 연결 지속성을 제공하기 위한 값(객체)을 Map 형식(이름과 값을 하나의 요소로 표현)으로 저장
HttpSession session = request.getSession();
//1. session은 바인딩 처리된 세션이 담긴 객체이고,
//JSSESIONID(식별자)로 어떤 클라이언트가 준 바인딩 처리된 세션인지를 구분할 수 있음
//2. 바인딩 된 세션은 브라우저를 열고 닫고 상관없이 30분 동안 아무것도 이용하지 않으면 자동 소멸됨
//3.
//3-1.
out.println("<!DOCTYPE html>");
out.println("<html>");
out.println("<head>");
out.println("<meta charset='UTF-8'>");
out.println("<title>Servlet</title>");
out.println("</head>");
out.println("<body>");
out.println("<h1>세션(Session)</h1>");
out.println("<hr>");
//3-2.
//HttpSession.isNew() : 세션을 트렉킹하여 바인딩된 경우 [false]를 반환하고, 세션을 생성하여 바인딩된 경우 [true]를 반환하는 메소드
if(session.isNew()) {
out.println("<p>세션을 생성하여 바인딩 하였습니다.</p>");
}else {
out.println("<p>세션을 트렉킹하여 바인딩 하였습니다.</p>");
}
//3-3.
//HttpSession.getId() : 세션을 구분하기 위한 식별자(세션 아이디)를 반환하는 메소드
out.println("<p>세션 아이디 = "+session.getId()+"</p>");
//세션 아이디 = E44474F8885DCBDFF9B6596F3FD871E1
//3-4.
//HttpSession.getMaxInactiveInterval() : 세션 유지시간(단위: 초)을 반환하는 메소드
//=> 기본적으로 세션의 유지시간은 1800초(30분)으로 설정
out.println("<p>세션 유지시간 = "+session.getMaxInactiveInterval()+"초</p>");
//세션 유지시간 = 1800초
//3-5.🔥🔥🔥 세션 공유하기
//HttpSession.setAttribute(String attributeName, Object attributeValue) : 바인딩된 세션에 세션 속성명(문자열)과 세션 속성값(객체)을 저장(변경)하는 메소드
//=> 기존 세션에 저장된 값과 같은 이름의 속성명을 사용한 경우 속성값 변경
//=> 연결 지속성을 제공하기 위한 정보를 하나의 이름과 값의 엔트리(Entry) 형식으로 저장
//동일한 세션을 바인딩한 모든 웹프로그램에서 세션 속성명으로 세션 속성값을 제공받아 사용 가능
//=> 하나의 클라이언트는 세션을 통해 모든 웹프로그램에서 객체를 공유하여 사용 가능
session.setAttribute("now",new Date()); //다른 웹프로그램에서도 객체를 사용할 수 있도록 공유
//이제부터 다른 웹프로그램에서도 now 라는 이름으로 Date() 객체 제공받을 수 있음
//3-6. 🔥🔥🔥 다른 웹프로그램에서 작성.. - 공유한 세션 사용하기
//HttpSession.getAttribute(String attributeName) :
//=> 바인딩된 세션에 저장된 속성값을 속성명을 전달받아 [Object객체]로 반환하는 메소드
//=> 세션에 저장된 속성값을 [Object 타입]으로 반환하므로 반드시 명시적 객체 형변환 후 사용
//=> 매개변수로 전달받은 속성명의 속성값이 없는 경우 [null] 반환
Date now = (Date)session.getAttribute("now");
out.println("<p>세션으로부터 제공받은 객체 = "+now+"</p>");
//3-7.🔥
//HttpSession.removeAttribute(String attributeName) : 속성명을 전달받아 바인딩된 세션에 저장된 속성값을 삭제하는 메소드
session.removeAttribute("now");
//now라는 이름으로 저장된 속성값을 지워주세요
//3-8.
//HttpSession.invalidate() : 바인딩된 세션의 결합을 해제하는 메소드
// => 세션의 언바인딩(UnBinding) 처리 - 세션 소멸
session.invalidate(); //세션을 무효화처리-언바인딩처리
out.println("</body>");
out.println("</html>");
}
}
반응형
'servlet' 카테고리의 다른 글
[servlet] 9. 방명록 프로그램 (0) | 2024.05.26 |
---|---|
[servlet] 8. JDBC 프로그램 (0) | 2024.05.26 |
[servlet] 6. 쿠키 생성, 전달, 제거 프로그램 (cookie) (0) | 2024.05.25 |
[servlet] 5. 파일업로드 프로그램 (multipart/form-data) (0) | 2024.05.24 |
[servlet] 4. 회원가입 프로그램 (form) (0) | 2024.05.24 |