본문 바로가기

프로그래밍/JSP 프로그래밍

JSP 프로그래밍_쿠키(Cookie)

쿠키(Cookie)란 ? 

- 서버와 클라이언트가 요청, 응답 과정을 거치면 연결이 해제되기 때문에 다시 사용할 정보를 쿠키와 세션에 보관해두었다가 다시 사용할 수 있다. 

- 쿠키는 서버에서 생성되어 클라이언트 측에 저장되며, 클라이언트가 다시 서버에 요청을 보낼 때 HTTP 메세지 헤더에서 정보를 확인할 수 있다. 

 

→ Cookie 쿠키 - 클라이언트 (서버와의 연결 정보를 클라이언트에서만 관리)

    Session 세션 - 서버 (클라이언트와의 연결 정보를 서버에서만 관리)

 

쿠키 예제 

(설명은 주석 번호 순서에 따라 읽어주세요.)

 

login.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
47
48
49
50
<%@page import="org.apache.jasper.tagplugins.jstl.core.ForEach"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
//1.  쿠키 생성은 null이라 if문을 수행하지 않고 html로 넘어감. (request)
//6. 응답  userId와 같다면 값을 넣어줌. 
// --> 쿠키가 저장됨.
Cookie[] cookies = request.getCookies();
 
String hasUserId = "";
 
if (cookies != null) {
    for (Cookie c : cookies) {
        if (c.getName().equals("userId")) {
            hasUserId = c.getValue();
            //표현식으로 input value태그에 넣음
            //out.println("쿠키에 저장된 사용자 아이디 : " + hasUserId);
            break;
        }
    }
}
%>
 
<!-- 2. html에서 웹 브라우저 띄우고 -->
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>쿠키 사용해보기</title>
</head>
<body>
    <form action="loginProc.jsp" method="post">
        <div>
            아이디 : <input type="text" name="userId" value="<%=hasUserId %>"
                required="required">
        </div>
        <div>
            비밀번호 : <input type="password" name="password" value="1234"
                required="required">
        </div>
        <div>
            <input type="checkbox" name="remember" value=""> 아이디 기억하기
        </div>
        <div>
            <input type="submit" value="쿠키저장및삭제">
        </div>
    </form>
</body>
</html>
cs

loginProc.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
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    
<%
 
// 3. 쿠키는 키와 값으로 이루어져 있으니 매개변수로 request해서 값을 긁어내야 함.
// 4. remember를 선택했다면 if문 실행해서 Cookie를 생성, 유효기간 지정 후 response해서 응답해줌.
// 4-2. remember를 선택하지 않았다면 else문을 실행해서 foreach문으로 유효기간 삭제, 그 지운 값을 response해서 응답해줌.
// 5. login.jsp로 다시 응답 처리
 
//form 태그로 넘어오는 값을 파싱하는 기술
//form 태그에 MIME TYPE -> application/x-form ...
//name="" 키 값을 찾아서 값을 긁어낼 수 있다.
String inputId = request.getParameter("userId");
String inputPwd = request.getParameter("password");
String remember = request.getParameter("remember");
 
//여기 파일에 목적은 remember 값 유무에 따라 로직을 작성해서 (쿠키 사용)
// remember는 <아이디 기억하기> 
if (remember != null) {
    // 쿠키 생성 - 생성자에 키와 값을 할당한다.
    Cookie cookie = new Cookie("userId", inputId); //쿠키 생성
    cookie.setMaxAge(60 * 60 * 24 * 7); //쿠키 유효기간 : 7일간 유지
    response.addCookie(cookie);
else {
    // 쿠키 삭제 remember에 사용자가 체크를 하지 않은 상태라면 쿠키를 삭제하기
    Cookie[] cookies = request.getCookies();
    if(cookies != null){
        for(Cookie c: cookies){
            if(c.getName().equals("userId")){
                c.setMaxAge(0);
                response.addCookie(c);
                break;
            }
        }
    }
}
 
response.sendRedirect("login.jsp");
%>
cs