JSP [06] Cookie, Session

totwo·2024년 7월 10일

JSP/Servlet/JSTL

목록 보기
6/15
post-thumbnail

HTTP

(Hyper Text Transfer Protocol)
비연결형 프로토콜

  • HTTP의 특징 : 해당 URL request받고 reesponse 해주면 연결을 끊어버림
    → HTTP의 방식으론 로그인한 후 다른 페이지로 이동시 내 정보를 유지할 수 없음

✔ 그래서 Client의 정보를 지속적으로 유지하기 위한 방법으로 Cookie & Session이 필요하다~


: 전달할 데이터를 Web Browser(Client)로 보냈다가 Web Server로 되돌려 받는 방법

Chrome 설정에서 서드 파티 쿠키 허용해줌.

Chrome 웹 스토어에서 EditThisCookie 확장 프로그램 설치해줌

https://chromewebstore.google.com/detail/editthiscookie/fngmhnnpilhplaeedifhccceomclgfbg?hl=ko&pli=1

Cookie의 특징
1. 쿠키는 Client의 브라우저(PC)에 저장된다.
2. Text형태만 값을 저장할 수 있다.
3. 도메인당 20개, 쿠키 하나당 4KB
4. Session에 비해 상대적으로 보안에 취약하다.

① 쿠키 만들기 - 생성자 안에 이름과 값을 넣어준다.

		Cookie cookie = new Cookie("visit", "OK");

  • 도메인 : localhost (Cookie 만든도메인)
  • 경로 : ContextPath
  • 기한 : 쿠키 유지기간

→ broswer를 다 꺼버리는 순간 보통 Cookie는 사라지는데 쿠키의 유통기한을 정할 수 있다

② 쿠키의 유통기한 정하기 (초단위로 되어있다)

		cookie.setMaxAge(60*60*24*365);   // 1년

→ 1년으로 유통기한 설정해봄

③ 쿠키 보내기

		response.addCookie(cookie);



[실습] Client가 가지고 있는 쿠키들의 이름을 출력하시오

<%-- jsp --%>
<body>
	<% 
		// Client가 가지고 있는 쿠키 가져오기
		Cookie[] cookies = request.getCookies();
		
		// [문제] 쿠키 배열에 있는 쿠키들의 이름을 출력하시오
		for(int i = 0; i < cookies.length; i++){
			out.println(cookies[i].getName() + "<br>");
		}
	%>
</body>

[실습] Client가 가지고 있는 쿠키들의 이름과 값을 출력하시오

<%-- jsp --%>
<body>
	<% 
		Cookie[] cookies = request.getCookies();
		
		// [문제] 쿠키 배열에 있는 쿠키들의 이름과 값을 출력하시오
		for(int i = 0; i < cookies.length; i++){
			out.println(cookies[i].getName() + "-");
			out.println(cookies[i].getValue() + "<br>");
		}
	%>
</body>




쿠키 삭제하기

  • 아쉽게도 쿠키를 삭제하는 메소드나 코드는 없다!!!!
  • 하지만 진짜 삭제하고 싶다면 편법은 있다.
<%-- jsp --%>
<body>
	<%
	
		Cookie cookie = new Cookie("visit", "");
		cookie.setMaxAge(0); // 보내지자마자 삭제하기 
		response.addCookie(cookie);
	%>
</body>

visit cookie는 사라짐





💠 Session

Session의 특징
1. Session에는 Object 형태로 저장가능 (다 가능) - 객체말고 class object임
2. 용량 제한이 따로 존재하지 않는다
3. 세션은 브라우저당 하나씩 발급이 된다
✔ 세션은 브라우저를 종료하는 순간 만료된다
✔ 세션의 만료시간은 기본 30분이다 (아무 행동하지 않을 시)
✔ 쿠키 삭제시 세션은 자동적으로 사라짐
4. Cookie에 비해 상대적으로 보안에 강력하다

(1) session.setAttribute(name, value) 형태로 세션 값 저장하기
→ 세션에 값을 저장하는 순간 어떠한 데이터든 다 Object로 변환된다. (UpCasting)

(2) 세션 안에 저장된 값 확인하기
→ 세션 안에 저장된 데이터는 다 Object 형태로 저장되어 있다.
→ 원하는 데이터 타입으로 사용하기 위해서는 자식데이터 타입을 변환해줘야 한다. (DownCasting)

<%-- jsp --%>
<body>
	<%
    	// 세션에 값을 저장하기 (UpCasting) 
		session.setAttribute("nickName", "마루는강쥐");  
        
        // 세션 안에 저장된 값 확인하기 (DownCasting)
		String nickName = (String)session.getAttribute("nickName");
     %>
	
	<%= nickName %>님 환영합니다!
<body>

(3) session.setMaxInactiveInterval() 세션에 생명주기 (초단위로 입력)

<%-- jsp ①--%>
<body>
	<%
		session.setAttribute("nickName", "마루는강쥐"); 
        session.setMaxInactiveInterval(80); // 세션에 생명주기 (초단위)
		String nickName = (String)session.getAttribute("nickName");
     %>
	
	<%= nickName %>님 환영합니다!
<body>

→ 80초 이후시 세션 종료됨!

[실습] 'nickname' + '여기는 개인정보 페이지입니다' 출력하기

<%-- jsp ② --%>
<body> 
	<%
		String nickName = (String)session.getAttribute("nickName");
	%>
	<%= nickName %> 여기는 개인정보 페이지입니다. 
</body>

jsp① 실행 후 jsp② 실행해보기

  • 세션 만료가 되면 nickName을 가져올 수 없어서 null값이 뜬다
  • 새로고침(실행)시 세션은 계속 초기화된다.

로그인 후 세션 있을 시

세션 만료시 NULL 값 출력


[실습] 로그인 창 만들기

<%-- jsp ① (ex07login.jsp)--%>
<body>
	<form action="Ex07LoginService" method="post">
		<h3>로그인</h3>
		아이디 : <input type="text" name="id"><br>
		비밀번호 : <input type="password" name="pw"><br>
		<input type="submit" value="로그인">
	</form>
</body>


입력받은 id는 maru, pw는 1122일 경우 Session에
'nick'을 '마루'로 정하여 저장하고 'ex07main.jsp'로 보내기

// .java(Servlet) (Ex07LoginService)
		String id = request.getParameter("id");
		String pw = request.getParameter("pw"); 
		
		if(id.equals("maru") && pw.equals("1122")) {
			// 로그인 성공
			// Servlet에서 Session 사용하는 방법
			HttpSession session = request.getSession();
            
            // 'nick'을 '마루'로 정해주기
			session.setAttribute("nick", "마루"); 
			response.sendRedirect("ex07main.jsp");
		} else {
			// 로그인 실패시 - ex07login.jsp로 이동시키시오
			response.sendRedirect("ex07login.jsp");
		}
	}

[실습]
1. 로그인 성공한 사람의 nick을 표현하세요
예) '마루'님 환영합니다.
2. 입력받은 id, pw가 'maru', '1122'가 아니면 '로그인페이지로 이동'

<%-- jsp ② (ex07main.jsp)--%>
<body>
	<% 
    	// session "nick" 가져와서 String으로 변환 후 String nick에 담아줌 
		String nick = (String)session.getAttribute("nick"); 
	%>
	
	<% if (nick != null){ %>
		'<%= nick %>'님 환영합니다. 
		<a href="ex07logoutService">로그아웃</a>
	<% }else { %>
		<a href="ex07login.jsp">로그인 페이지로 이동</a>
	<% } %>	
</body>

세션 있을 시

로그아웃 누르거나 세션 만료시

profile
Hello, World!

0개의 댓글