본문 바로가기
학습/JSP

15. 세션

by Elfen Lied 2022. 11. 10.
반응형

 - 세션의 특징

  • 정보가 서버의 메모리에 저장됨
  • 브라우저의 세션 연동은 세션 쿠키를 이용함
  • 쿠키보다 보안에 유리함
  • 서버에 부하를 줄 수 있음
  • 브라우저(사용자)당 한 개의 세션(세션 id)이 생성됨
  • 세션은 유효 시간을 가짐(기본 유효 시간은 30분임)
  • 로그인 상태 유지 기능이나 쇼핑몰의 장바구니 담기 기능 등에 주로 사용됨

 

 

- 세션의 실행 과정

  1. 브라우저로 사이트에 접속함
  2. 서버는 접속한 브라우저에 대한 세션 객체를 생성함
  3. 서버는 생성된 세션 id를 클라이언트 브라우저에 응답함
  4. 브라우저는 서버로부터 받은 세션 id를 브라우저가 사용하는 메모리의 세션 쿠키에 저장함(쿠키 이름은 jsessionId)
  5. 브라우저가 재접속하면 브라우저는 세션 쿠키에 저장된 세션 id를 서버에 전달함
  6. 서버는 전송된 세션 id를 이용해 해당 세션에 접근하여 작업을 수행함

 

 

- 세션 API의 특징과 기능

  • getSession() : 기존의 세션 객체가 존재하면 반환하고, 없으면 새로 생성함
  • getSession(true) : 기존의 세션 객체가 존재하면 반환하고, 없으면 새로 생성함
  • getSession(false) : 기존의 세션 객체가 존재하면 반환하고, 없으면 null을 반환함 
반환 타입 메서드 설명
Object getAttribute(String name) 속성 이름이 name인 속성값을 Object 타입으로 반환함.
해당되는 속성 이름이 없을 경우 null 값을 반환함
Enumeration getAttributeNames() 세션 속성 이름들을 Enumeration 객체 타입으로 반환함
long getCreationTime() 1970년 1월 1일 0시 0초를 기준으로 현재 세션이 생성된
시간까지 경과한 시간을 계산하여 1/1000초 값으로 반환함
String getId() 세션에 할당된 고유 식별자를 String 타입으로 반환함
int getMaxInactiveInterval() 현재 생성된 세션을 유지하기 위해 설정된 
세션 유지 시간을 int 타입으로 반환함
void invalidate() 현재 생성된 세션을 소멸함
boolean isNew() 최초로 생성된 세션인지 기존에 생성되어 있었던 세션인지 판별
void removeAttribute(String name) 세션 속성 이름이 name인 속성을 제거함
void setAttribute(String name, Object value) 세션 속성 이름이 name인 속성에 속성 값으로
value를 할당함
void setMaxInactiveInterval(int interval) 세션을 유지하기 위한 세션 유지 시간을 초 단위로 설정함

 

 

 

- 서블릿에서 세션 API 이용하기

 

- SessionTest 서블릿 생성

package sec03.ex01;

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("/sess2")
public class SessionTest2 extends HttpServlet {

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		response.setContentType("text/html;charset=utf-8");
		PrintWriter out = response.getWriter();
		
		HttpSession session = request.getSession(); // 세션 생성
		out.print("세션 아이디 : " + session.getId() + "<br>");
		out.print("최초 세션 생성 시간: " + new Date(session.getCreationTime()) + "<br>");
		out.print("최근 세션 접근 시간: " + new Date(session.getLastAccessedTime()) + "<br>");
		
		session.setMaxInactiveInterval(60); // 세션 유효시간 설정 : 단위 초, 기본값 1800초
		
		out.print("유효 시간: " + session.getMaxInactiveInterval() + "<br>");
		if(session.isNew()) {
			out.print("세션 생성");
		}
	}

}

 

 

- 세션 삭제

package sec03.ex01;

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("/sess3")
public class SessionTest3 extends HttpServlet {

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		response.setContentType("text/html;charset=utf-8");
		PrintWriter out = response.getWriter();
		
		HttpSession session = request.getSession();
		if(session.isNew()) {
			out.print("세션 생성");
		}
		session.invalidate(); // 세션 삭제
	}

}

 

 

 

- 세션을 이용한 로그인 정보 바인딩

 

- SessionTest4 서블릿 생성

package sec03.ex01;

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("/sess4")
public class SessionTest4 extends HttpServlet {

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		response.setContentType("text/html;charset=utf-8");
		PrintWriter out = response.getWriter();
		
		HttpSession session = request.getSession(); // 세션 생성
		String id = request.getParameter("user_id");
		String pw = request.getParameter("user_pw");
	
		if(session.isNew()) { // 최초 요청시
			if(id != null && !id.trim().equals("")) {
				session.setAttribute("user_id", id);
				out.print("<a href='sess4'>로그인 상태 확인</a>");
			} else {
				out.print("<a href='login2.html'>다시로그인하기</a>");
				session.invalidate();
			}
		} else { // 재요청 (get요청)
			id = (String) session.getAttribute("user_id");
			if(id != null) {
				out.print("안녕하세요 " + id + "님");
			} else {
				out.print("<a href='login2.html'>다시로그인하기</a>");
				session.invalidate();
			}
		}
	}
	
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		doGet(req, resp);
	}

}

 

 

- SessionTest5 서블릿 생성

package sec03.ex01;

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("/sess5")
public class SessionTest5 extends HttpServlet {

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		response.setContentType("text/html;charset=utf-8");
		PrintWriter out = response.getWriter();
		
		HttpSession session = request.getSession();
		String userId = (String) session.getAttribute("user_id");
		out.print("세션객체이 바인딩 된 데이터 : " + userId);
	}

}

 

 

- login2.html 생성

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<form action="sess4" name="frmLogin" method="post">
		아이디 : <input type="text" name="user_id"><br>
		비밀번호 : <input type="password" name="user_pw"><br>
		<input type="submit" value="로그인">
		<input type="reset" value="다시입력">
	</form>
</body>
</html>

 

 

 

- lombok.jar 다운 및 설치

 

lombok.jar 다운받기

( https://projectlombok.org/download )

알집으로 보인다면 명령 프롬프트에서 jar 파일이 있는 경로로 간다

그리고 다음 명령어를 입력

java -jar lombok.jar

can't find IDE 뜨면 ok 누르고

IDEs 부분에 이클립스가 안잡히면 Specify location... 눌러서 eclipse.exe 추가

그리고 Install / Update 누르고

마지막 Quit Installer 누르면 설치 완료.

 

WEB-INF \ lib 폴더 안에 lombok.jar 파일 넣고 빌드패스 지정

 

 

 

- lombok 사용하기

package lombokTest;

import lombok.Data;

@Data
public class MemberDTO {
	private String id;
	private String name;
	private String password;
	private String email;
	
	public static void main(String[] args) {
		MemberDTO dto = new MemberDTO();
		dto.setId("bboggu");
		dto.setName("뽀꾸");
		dto.setPassword("1234");
		dto.setEmail("bbo@ghg.com");
		System.out.println(dto);
	}
}

 

 

@Data 를 적어주면 

필드 변수를 적어 넣고 ctrl + o 를 눌러서 만들어 졌는지 확인해보자

Getter, Setter 기타등등 다 만들어 져있음.

 

혹시나 안뜬다면 이클립스를 다시 시작해보기

반응형

댓글