#쿠키란?
- 사용자가 웹 사이트를 방문할 때 웹 사이트에서 클라이언트의 컴퓨터에 저장해 놓는 작은 파일.
- 웹 페이지들 사이의 공유 정보를 클라이언트 컴퓨터에 저장해 놓고 필요할 때 여러 웹 페이지들이 공유해서 사용할 수 있도록 매개 역할을 함.
- http 프로토콜은 웹 브라우저의 응답 후 일정 시간이 지나면 접속을 끊는 특징이 있음.
- 이런 특징 때문에 쿠키 기술이 발달함.
#쿠키의 특징
- 쿠키는 서버에서 생성.
- 쿠키는 클라이언트 컴퓨터에 저장됨.
- 쿠키의 크기는 4kb로 제한적임. 300개 정도의 쿠키를 만들어 사용함.
- 도메인당 쿠키가 만들어짐.
- 하지만 쿠키는 보안이 취약함.
#쿠키의 생성 방법과 관련 메서드
*쿠키의 생성 방법
- 쿠키의 생성은 쿠키 클래스를 사용.
- 쿠키 속성 설정(setter)
- 쿠키의 전송(response 객체에 탑재: addCookie())
*쿠키 관련 메서드
-setMaxAge(): 쿠키의 유효기간을 설정.
-setPath(): 쿠키 사용을 위한 디렉토리를 설정. (특정 경로의 url로 전송하도록 설정)
-setValue(): 쿠키 값을 설정하는 메서드.
-setVersion(): 쿠키의 버전을 설정.
-getMaxAge(): 쿠키의 유효기간 정보를 얻어옴.
-getName(): 쿠키의 이름을 얻어 옴.
-getPath():쿠키의 유효 디렉토리 정보를 얻어옴.
-getVersion(): 쿠키의 버전을 얻어옴.
-getCookies(): 쿠키의 데이터를 읽어옴. ==> 웹 브라우저가 보낸 쿠키를 배열로 반환함.
#저장된 쿠키를 사용하는 순서
1. 웹 브라우저에 요청하여 쿠키를 얻어옴.
2. 쿠키는 이름, 값의 쌍으로 된 배열 형태로 반환됨. -> 반환된 배열에서 쿠키의 이름을 가져옴.
3. 쿠키의 이름을 통해 해당 쿠키의 설정값을 추출함.
Ex01.jsp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
String cookieName = "name";
Cookie cookie = new Cookie(cookieName, "홍길동");
//setMaxAge(): 쿠키의 유효 기간을 설정하는 메서드.
//유효 기간 설정 방법: 60초 * 30 ==> 30분
cookie.setMaxAge(60 * 30);
//쿠키를 클라이언트 컴퓨터에 전송
response.addCookie(cookie);
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form method="post" action="Ex01_01.jsp">
<input type="submit" value="생성된 쿠키 확인">
</form>
</body>
</html>
|
cs |
Ex01_01.jsp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
Cookie[] cookies = request.getCookies();
if(cookies != null) {
for(int i=0; i<cookies.length; i++) {
out.println("cookies["+i+"] name >>> " + cookies[i].getName() + "<br>");
out.println("cookies["+i+"] value >>>" + cookies[i].getValue() + "<br>");
}
}
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<hr width="50%">
<br><br>
<form method="post" action="Ex01_02.jsp">
<input type="submit" value="쿠키 삭제">
</form>
</body>
</html>
|
cs |
Ex01_02.jsp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
Cookie[] cookies = request.getCookies();
if(cookies != null) {
for(int i=0; i<cookies.length; i++) {
String str = cookies[i].getName();
if(str.equals("name")) {
out.println("cookies["+i+"] name >>> " + cookies[i].getName() + "<br>");
out.println("cookies["+i+"] value >>> " + cookies[i].getValue() + "<br>");
//쿠키 삭제.
cookies[i].setMaxAge(0);
response.addCookie(cookies[i]);
}
}
}
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<hr width="50%">
<br><br>
<form method="post" action="Ex01_03.jsp">
<input type="submit" value="쿠키 확인">
</form>
</body>
</html>
|
cs |
Ex01_03.jsp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
Cookie[] cookies = request.getCookies();
if(cookies != null) {
for(int i=0; i<cookies.length; i++) {
out.println("cookies["+i+"] name >>> " + cookies[i].getName() + "<br>");
out.println("cookies["+i+"] value >>> " + cookies[i].getValue() + "<br>");
}
}
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
</body>
</html>
|
cs |
#세션
- 쿠키와 마찬가지로 서버와의 connection관계를 유지하기 위해 이용자의 정보를 저장하는 객체.
#세션의 특징
- 세션은 서버에서만 접근이 가능함.
- 서버의 메모리에 저장된.
- 쿠키보다 보안성이 높음.
- 서버에 부하를 줄 수 있음.
- 쿠키의 기본 용량이 4kb, 300개로 제한적인 반면에 세션은 데이터에 제한이 없음.
- 브라우저당 한 개의 세션이 생성됨.
- 로그인 상태 유지 기능이나 쇼핑몰의 장바구니 담기 기능 등에 주로 사용됨.
#세션 관련 메서드
- setAttribute(): 세션의 속성을 설정.
형식) session.setAttribute("id", value);
-getattribute(): 세션에서 데이터를 가져올 때.
형식) String id = session.getAttribute("id")
-getAttributeNames(): 세션에 저장되어 있는 모든 데이터의 이름을 가져올 때.
-removeAttribute(): 세션의 특정 데이터를 제거.
-invalidate(): 세션의 모든 데이터를 삭제
-getId(): 자동 생성된 세션의 아이디를 얻어올 때 사용
-isNew(): 세션이 최오 생성되었는지 여부를 알고자 할 때.
-getMaxInactiveInterval(): 세션의 유효 시간을 얻어올 때 사용함.
Ex02.jsp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<div align="center">
<form method="post" action="Ex02_01.jsp">
<p>아이디: <input type="text" name="id"> </p>
<p>비밀번호: <input type="password" name="pwd"> </p>
<input type="submit" value="로그인">
</form>
</div>
</body>
</html>
|
cs |
Ex02_01.jsp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
String userId = request.getParameter("id").trim();
String userPwd = request.getParameter("pwd").trim();
String dbId = "hong";
String dbPwd = "1234";
if(userId.equals(dbId)) {
if(userPwd.equals(dbPwd)) {
//회원인 경우 메인 페이지로 이동
//세션 설정
session.setAttribute("ID", userId);
session.setAttribute("PWD", userPwd);
session.setAttribute("NAME", "홍길동");
RequestDispatcher rd = request.getRequestDispatcher("Ex02_02.jsp");
rd.forward(request, response);
}
}
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
</body>
</html>
|
cs |
Ex02_02.jsp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
String userId = request.getParameter("id").trim();
String userPwd = request.getParameter("pwd").trim();
String sessionId = (String)session.getAttribute("ID");
String sessionPwd = (String)session.getAttribute("PWD");
String sessionName = (String)session.getAttribute("NAME");
%>
<h2>입력 폼 (Ex02.jsp)에서 넘어온 데이터</h2>
<h3>
입력 받은 아이디: <%=userId %> <br>
입력 받은 비밀번호: <%=userPwd %> <br>
</h3>
<hr>
<h2>세션으로 넘어온 데이터</h2>
<h3>
세션으로 받은 아이디: <%=sessionId %> <br>
세션으로 받은 비밀번호: <%=sessionPwd %> <br>
세션으로 받은 이름: <%=sessionName %> <br>
</h3>
<script type="text/javascript">
location.href="Ex02_03.jsp";
</script>
</body>
</html>
|
cs |
Ex02_03.jsp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
|
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
/* String userId = request.getParameter("id").trim();
String userPwd = request.getParameter("pwd").trim(); */ //못받아옴.
String sessionId = (String)session.getAttribute("ID");
String sessionPwd = (String)session.getAttribute("PWD");
String sessionName = (String)session.getAttribute("NAME");
//getMaxInactiveInterval(): 세션 유효 시간 확인 메서드
int time = session.getMaxInactiveInterval();
//세션값을 삭제하기.
session.removeAttribute("NAME");
String name = (String)session.getAttribute("NAME");
%>
<%-- <h2>입력 폼 (Ex02.jsp)에서 넘어온 데이터</h2>
<h3>
입력 받은 아이디: <%=userId %> <br>
입력 받은 비밀번호: <%=userPwd %> <br>
</h3> --%>
<hr>
<h2>세션으로 넘어온 데이터</h2>
<h3>
세션으로 받은 아이디: <%=sessionId %> <br>
세션으로 받은 비밀번호: <%=sessionPwd %> <br>
세션으로 받은 이름: <%=sessionName %> <br>
</h3>
<h2>session 유효 시간 결과</h2>
<h3>session 유효 시간 >>> <%=time %></h3>
<h3>세션값 삭제 후 받은 이름 <%=name %></h3>
</body>
</html>
|
cs |
'국기훈련과정 > JSP' 카테고리의 다른 글
06. JSP와 DB 연동하기 2 (0) | 2021.10.22 |
---|---|
05. JSP와 JDBC 연동하기 (0) | 2021.10.19 |
03. JSP_02 (0) | 2021.10.15 |
02. JSP_01 (0) | 2021.10.15 |
01. 웹 프로그래밍 (0) | 2021.10.14 |