본문 바로가기

웹 구축/Jsp & Servlet

JSP 3 쿠키, 세션

『 Response 객체 』

 

sendRedirect() - 현재 실행중인 JSP page의 실행을 중단하고 다른 web page가 대신 호출되도록 만드는 기능.

ex : <% response.sendRedircet("http://www.naver.com") %>

 

<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>

<form action = "ex05_response.jsp">
	어떤 사이트 갈래?
	<input type="text" name="url">
	<input type="submit" value="이동">
</form>

</body>
</html>
<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
<% request.setCharacterEncoding("EUC-KR"); 

	String url = request.getParameter("url");
	if(url.equals("네이버")){
	response.sendRedirect("http://www.naver.com");
	}else if (url.equals("나무위키")){
		response.sendRedirect("https://namu.wiki");
	}
	%>

</body>
</html>

조건문에 sendRedirect 메서드를 사용해 해당 사이트로 가라고 응답하는 코드이다.

 

 

 

HTTP 의 특성

 

- 비연결성(Connectionless)

 

 

- 무상태(Stateless)

 

상태가 없기 때문에 페이지가 넘어가면 매개변수 전달이 되지 않는다.

 

 

쿠키(Cookie) - 클라이언트의 상태를 가지고 있는.

클라이언트(브라우저)에 저장되는 키와 값이 들어있는 작은 데이터 파일

 

쿠키는 생성된 이후 만료일자까지 살아있으며(EXpires/Max-Ages), 이 값은 수정 가능하다(Name,Value)

 

1. 클라이언트가 페이지 요청

2. 상태를 유지하고 싶은 값을 쿠키로 생성

3. http 헤더에 쿠키를 포함시켜 응답.

4. 브라우저가 종료되었어도 쿠키 만료 기간이 있으면 클라이언트에서 보관

5. 같은 요청을 할 경우 http 헤더에 쿠키를 함께 보냄

6. 서버에서 쿠키를 읽어 이전 상태 정보 변경할 때 쿠키를 업데이트하여 포함시켜 응답.

 

 

쿠키 사용 예

 

1. ID 저장, 로그인 상태 유지

2. 일주일간 다시 보지 않기

3. 쇼핑몰 장바구니

 

쿠키 단점

 

1. 보안에 취약하다 (수정,삽입,삭제 가능)

2. 작은 허용 용량 (개당, 4kb, 도메인 당, 20개, 전체 300개)

3. 브라우저를 변경할 경우 다른 브라우저에서 저장한 쿠키 값을 사용할 수 없음

 

 

 

<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
<% 
//1. 쿠키 객체 생성			// test= 키, firstcookie는 값 둘다 스트링
Cookie cookie = new Cookie("test","firstcookie");

//2. 쿠키 만료기한 설정(초단위)
cookie.setMaxAge(60*30);

//3. 클라이언트에 쿠키 전송

response.addCookie(cookie);

//4. 쿠키를 생성하고 바로 클라이언트에 전송가능
response.addCookie(new Cookie("id", "test"));


%>
</body>
</html>

쿠키는 쿠키객체를 생성하고 만료기한을 설정하며, 클라이언트에 전송하여야 한다.

 

 

 

 

<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
<%  
//1. 쿠키 객체 얻어오기
 Cookie[] cookies = request.getCookies();
for(Cookie c:cookies){
	out.print(c.getName()+" : "+c.getValue()+"<br>");
}

%>
</body>
</html>

그리고 클라이언트가 쿠키를 얻어오도록 하여야 한다.

 

 

 

<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
<%
//1. 쿠키객체 생성
Cookie cookie = new Cookie("name",""); //이름만 맞으면되고, 값은 맞출 필요 없음

//2. 유효기간 수정(0);
cookie.setMaxAge(0);

//3. 쿠키를 클라이언트로 전송
 response.addCookie(cookie);


%>

</body>
</html>

 

쿠키를 제거하는 메서드이다, 쿠키를 제거할때 선언하는 객체는 이름만 맞으면 되며

쿠키의 생존시간을 0으로 지정하여 바로 만료되게 하는 방식이다

만료시간을 지정한 후 클라이언트로 전송하여 무조건 동기화하여야 한다.

 

 

 

 

 

【 세션 】

 

세션은 브라우저가 종료되기 전까지 클라이언트의 정보를 유지하게 해주는 기술

- 사용자 정보 파일을 서버 측에서 관리 

 

 

1. 클라이언트가 페이지 요청 (request)

2. 해당 브라우저(클라이언트)에 유일한 ID(Session ID)를 부여함

3. 응답헤더에 Session ID를 포함해서 전송

4. 쿠키에 Session ID를 저장.

 

 

각 클라이언트에게 고유 ID를 부여하며

보안 면에서 쿠키보다 우수하다. (사용자 정보 노출 X)

사용자가 많아질수록 서버 메모리를 많이 차지하게 됨

 

세션 사용예 : 로그인

 

<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
<%
//1. 세션 생성(setAttribute(문자열, 오브젝트))
	session.setAttribute("id", "arl6204");
	session.setAttribute("pw", "fafaoo");
	session.setAttribute("age", 26); // 세션은 int 사용가능

%>
<a href = "ex04GetSession.jsp">세션 확인</a>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
<%

//1. 생성한 세션값 가져오기
	String id = (String)session.getAttribute("id");
	String pw = (String)session.getAttribute("pw");
	Integer age = (Integer)session.getAttribute("age");
	


	

%>
아이디: <%=id %><br>
비밀번호: <%=pw %><br>
나이: <%=age %><br>

</body>
</html>
<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
    <%@page import="java.util.Enumeration" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
<%// 데이터를 집합형태로 만들어주는 메서드
	Enumeration names = session.getAttributeNames(); // 세션의 name을 다 가져옴
		while(names.hasMoreElements()){ // names 의 요소를 가져옴
		String name = names.nextElement().toString(); // 문자열 형태로 바꿔서 저장
		String value = session.getAttribute(name).toString(); //
		out.print(name+" : "+value+"<br>");
		}
%>
</body>
</html>

세션을 데이터 집합형태로 순서대로 뽑아 name을 가져오고

문자열 형태로 바꾸어 사용자에게 보여주는 코드이다.

 

 

<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
<%//세션 제거

session.removeAttribute("id");


%>
<a href ="ex04GetSessions.jsp">세션 학인</a>
</body>
</html>

세션 제거 코드.

 

 

'웹 구축 > Jsp & Servlet' 카테고리의 다른 글

JSP 2 - 지시자.  (0) 2021.01.28
JSP 1  (0) 2021.01.27
Servlet 3  (0) 2021.01.27
Servlet 2  (0) 2021.01.26
Servlet  (0) 2021.01.26