Front-end

JSP & Servlet DAY 5 ( JSP 쿠키(Cookie)와 세션(Session), 세션 로그인 실습, Scope )

도키마 2024. 7. 30. 12:51



 

 

 

 

오늘의 노래 추천 👖

 

 
Heart Shaker
아티스트
TWICE (트와이스)
앨범
Merry & Happy
발매일
1970.01.01

 

 

저 초록 앨범 커버만 봐도 심장이 뜀. . . 정말로

그리구 이거랑 feel special, alcohol free, scientist 도 진짜 좋아해여 개취로

 


 

 

 

 

 

 

 

 

 

 

 

 

DAY 5

 

 

 

 

 

 

 

 

 

 

 

ㅡ  쿠키(cookie)와 세션(session) ㅡ

 

 

 

 

 

연결을 계속 유지한다면 클라이언트가 늘어남에 따라 불필요한 서버자원 소모

 

쿠키 와 세션

 

 

 

 

 

 

 

 

ㅡ  쿠키(cookie) ㅡ

cookie : client (browser)에 저장되는 키와 값이 들어있는 작은 데이터 파일

 

cookie 동작 방식

 

 

 

 

Cookie cookie = new Cookie ( "test", "testCookie" )

 

ㅡ  쿠키 객체 생성,  만료 기간 설정, 클라이언트 응답 ㅡ

Cookie, setMaxAge, response.addCookie

쿠키 생성

 

1. 쿠키 객체 생성

2. 만료 기간 설정

3. 클라이언트로 쿠키 응답

 

 

 

 

ㅡ  쿠키 불러오기 name, value 출력 ㅡ

request.getCookie, for문

쿠키 확인

 

4. 생성된 쿠키 모두 가져오기

5. 각 쿠키의 name 과 value 확인

 

 

 

 

ㅡ  쿠키 삭제 ㅡ

setMaxAge, addCookie

쿠키 삭제

 

 

 

 

 

 

 

 

ㅡ 세션(session) ㅡ

session : 브라우저가 종료되기 전까지 클라이언트의 정보를 유지

 

session 동작 방식

 

사용자의 정보를 서버에서 관리

서버에서 중복되지 않는 클라이언트 별 SessionID 발급 후 사용자 식별에 사용

ㅡ> SessionID는 브라우저가 종료될 때 까지 보관

 

 

 

[ 자바에서 세션 실습 ]

 

ㅡ  세션 값 저장 ㅡ

setAttribute

세션 값 저장

 

// Ex04SetSession.jsp
<body>
	<%
		session.setAttribute("id", "아이디");
		session.setAttribute("age", 22);
		// 배열값 생성
		ArrayList<String> fu = new ArrayList<String>();
		fu.add("apple");
		fu.add("banana");
		session.setAttribute("fu", fu);
	%>
	<a href="Ex05GetSession.jsp">세션확인</a>
	<a href="Ex05GetSession">세션확인(Servlet)</a>
</body>

 

쿠키는 한번에 하나의 정보만 저장할 수 있는 반면

세션은 여러개의 세션을 묶어서 보낼 수 있음 ( 예를들어 VO, DTO 등도 묶어보낼 수 있음 )

 

ㅡ> 서버에 값이 저장됨

 

 

 

 

ㅡ  세션 확인 ㅡ

getAttribute

세션 확인

 

//Ex05GetSession.jsp
<body>
	<% 
		// 식별자 이름으로 getAttribute 한 값은 object 타입이므로 String으로 형변환
		String id = (String)(session.getAttribute("id"));
		Integer age = (Integer)session.getAttribute("age");
		ArrayList<String> fu = (ArrayList<String>)(session.getAttribute("fu"));
	%>
	id: <%=id %>
	age: <%=age %>
	fu: <%=fu %>
	<a href="Ex06RemoveSession.jsp">세션삭제</a>
	<a href="Ex07Invalidate.jsp">세션모두삭제</a>
</body>

 

출력 결과

 

getAttribute 와 식별자 이름을 이용해 세션값 불러오기

object 타입의 값이므로 형변환

 

 

 

 

ㅡ  세션 값 삭제 ㅡ

removeAttribute

세션 삭제

 

// Ex06RemoveSession.jsp
<body>
	<%
		// int 타입의 session 값 확인
		session.removeAttribute("age");
	%>
	<a href="Ex05GetSession.jsp">세션확인</a>
</body>

 

null 값을 가질 수 없는 int 타입의 session 값을 삭제하면 오류가 뜸

ㅡ> null을 가질 수 있는 Integer 을 사용해야함

 

출력 결과

 

 

 

 

ㅡ  세션 값 모두 삭제 ㅡ

invalidate

Invalidate

 

세션을 모두 한번에 삭제하기 위해 Invalidate 메서드 사용

 

출력 결과

 

 

 

 

 

 

 ㅡ Servlet 으로 세션 확인 실습 ㅡ

 request.getsession

 

 요청이 들어왔을 때 세션 id 를 부여하고 저장함으로 request 객체를 사용

 

protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		HttpSession session = request.getSession();
		String id = (String)session.getAttribute("id");
		
		response.setContentType("text/html; charset=UTF-8");
		PrintWriter out = response.getWriter();
		out.print(id);
	}

 

출력 결과

 

 

 

 

 

 

 

 

ㅡ Session 로그인 실습 ㅡ

 

예제1

 

// Ex08LoginForm.html
<body>
	<form action="Ex08LoginCheck">
		<table>
			<tr>
				<td><input type="text" name="id" placeholder="아이디를 입력하세요"></td>
			</tr>
			<tr>
				<td><input type="password" name="pw" placeholder="비밀번호를 입력하세요"></td>
			</tr>
			<tr>
				<td><input type="submit" value="LOGIN"></td>
			</tr>
		</table>
	</form>
</body>

 

// Ex08LoginCheck (Servlet)
public class Ex08LoginCheck extends HttpServlet {
	private static final long serialVersionUID = 1L;

	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		String id = request.getParameter("id");
		String pw = request.getParameter("pw");
		HttpSession session = request.getSession();
		
		PrintWriter out = response.getWriter();
		
		if(id.equals("test")&&pw.equals("12345")){
			session.setAttribute("id", id);
			session.setAttribute("pw", pw);
			response.sendRedirect("Ex08Main.jsp");
		}else {
			response.sendRedirect("Ex08LoginForm.html");
		}
	}
}

 

// Ex08Main.jsp
<body>
	<%
		String id = (String)session.getAttribute("id");
	%>
	<%=id %>님 환영합니다
	<a href="Ex08Logout">로그아웃</a>
</body>

 

// Ex08Logout (Servlet)
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		HttpSession session = request.getSession();
		session.invalidate();
		response.sendRedirect("Ex08LoginForm.html");
	}

 

출력 결과

 

 

 

 

 

 

 

 

 

 

ㅡ Cookie 와 Session 차별점 ㅡ

 

 

 쿠키는 사용자 정보를 클라이언트에 저장하는 반면 세션은 서버에 저장

쿠키가 세션보다 상대적 보안이 불안한 대신 속도가 더 빠름

쿠키는 설정 만료일이 되면 삭제되고 세션은 브라우저 종료 시 삭제

 

 

 

 

 

 

 

 

 

 

 

ㅡ Scope ㅡ

 JSP 페이지 내 객체들은 어디서든 모두 정해진 영역 안에서만 사용 가능

 

scope 영역

 

 

 

 

 

 

ㅡ Page Scope ㅡ

 선언된 JSP 페이지 내에서만 사용 가능

 

Page Scope

 

pageContext 내장객체로 사용 가능

ㅡ> 저장된 값은 저장된 페이지 내 에서 지역변수로 사용

 

 

 

 

ㅡ PageContext 실습 ㅡ

PageContext, setAttribute

 

1번페이지
2번 페이지

 

 ㅡ> 같은 페이지 내에서만 값을 불러올 수 있음

 

 

 

ㅡ page scope 주 사용 용도 ㅡ

EL 표기법 사용 시

 

page scope 주 사용 용도

 

EL 표기법

 

출력 결과

 

ㅡ>  pageContext, request, session 객체 모두 setAttribute와 EL 표기법으로 사용가능

 

 

 

 

 

 

ㅡ Request Scope ㅡ

 클라이언트로부터 요청을 받고 응답할 때까지 사용 가능

 

Request scope

 

 ㅡ> 요청이 끝나고 새 요청을 받기전까지 사용

 

Request scope

 

 

  

ㅡ Request scope 주 사용 용도 ㅡ

클라이언트 요청을 다룰 때

forward 로 데이터를 넘겨 유지하고자 할 때

 

 

 

 

 

 

 

ㅡ Request Scope ㅡ

 세션이 유지되는 동안 사용 가능

 

Request Scope

 

 

 

ㅡ Session scope 주 사용 용도 ㅡ

로그인 시 사용자 정보를 저장하고 싶을 때 주로 사용

 

 

 

 

 

 

ㅡ Application Scope ㅡ

웹 어플리케이션이 사용되는 동안 사용 가능

Application Scope

 

 

 

Application scope 주 사용 용도 ㅡ

든 클라이언트들이 공통적으로 사용하는 값 저장

 

 

 

 

 

 

ㅡ Page vs Request Scope ㅡ

 

 

 

 

 

디자인 패턴 중 하나인 mvc 패턴

 

 

(수정중)




 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 



 

 

 

 

 

 

BYE