19.05.05 Cookie & Session (책+동영상)

Back-End/JSP 2019. 5. 5. 13:12
728x90
반응형

 -쿠키란?-

 

서버측에서 사용자가 필요한 정보들를 담아서 "내 컴퓨터" 에 넘겨주는 것!

쿠키는 웹브라우저 자체의 쿠키 저장소에 저장.

 

(Response 객체에 쿠키값을 넘겨서 사용)

 

메소드 이름 

설명 

int getMaxAge( )

Cookie의 최대 지속시간을 초 단위로 지정합니다. -1일 경우 브라우저가 종료되는 쿠키를 만료

String getName( ) 

Cookie의 이름을 스트링 타입으로 반환 

String getValue( )

Cookie의 값을 스트링 타입으로 반환 

void setMaxAge(int expiry) 

Cookie의 만료시간을 초 단위로 설정합니다. 

void setValue(String newValue) 

Cookie에 새로운 값을 설정할 때 사용합니다. 

 

 

 

 

-예제 및 출력 결과-

 

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
51
52
53
54
55
56
<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<body>
 
    <%
        //사용자 컴퓨터의 쿠키 저장소로부터 쿠키값을 읽어들임. 몇개인지 모르기에 배열을 이용하여 쿠키값을 저장
        Cookie[] cookies = request.getCookies();
        String id = "";
 
        //쿠키값이 없을 수도 있기에 null 처리를 해줍니다.
        if (cookies != null) {
            for (int i = 0; i < cookies.length; i++//쿠키에 담긴값을 출력
            {
                if (cookies[i].getName().equals("id")) //쿠키에 담긴 값의 이름과  id가 같을때 실행
                {
                    id = cookies[i].getValue();
                    break//원하는 아이디를 찾았을때 멈춘다.
                }
            }
        }
    %>
 
    <center>
        <h2>쿠키 로그인</h2>
        <form action="CookieLoginProc.jsp" method="post">
            <table width="400" border="1">
                <!-- 테이블을 생성 -->
                <tr height="50">
                    <td width="150">아이디</td>
                    <td width="250"><input type="text" name="id" value="<%=id%>">
                    </td>
                </tr>
 
                <tr height="50">
                    <td width="150">패스워드</td>
                    <td width="250"><input type="password" name="pass"></td>
                </tr>
 
                <tr height="50">
                    <td colspan="2" align="center"><input type="checkbox"
                        name="save" value="1">아이디 저장</td>
                </tr>
 
                <tr height="50">
                    <td colspan="2" align="center"><input type="submit"
                        value="로그인"></td>
                </tr>
            </table>
 
        </form>
    </center>
 
</body>
</html>
cs

 

 

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
<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<body>
    <%
 
    request.setCharacterEncoding("EUC-KR");
 
 
    //아이디 저장 체크 박스가 체크되었는지 판단 여부
    String save = request.getParameter("save");
    
    //아이디 값을 저장
    String id = request.getParameter("id");
    
    //체크 되었는지 비교 판단
    if(save != null//아이디 저장이 눌렸다면
    {
        
        //쿠키를 사용하려면 쿠키클래스를 생성해 주어야 함.
        Cookie cookie = new Cookie("id",id); //디폴트 쿠키는 없다 (값을 넣어야 한다.)
                                        //1번째 String 키값을 적어줌
                                        //2번째는 해당 value 값을 넘겨줌
                                        //id 값을 id라는 이름으로 읽어들인다.
                
        //쿠키 유효시간 설정                                
        cookie.setMaxAge(60*3); //10분간 쿠키가 유효하다.    
                        
        response.addCookie(cookie); //사용자에게 쿠키를 넘겨준다.
        
        
        out.write("쿠키 생성완료");
    }
    
    
    
%>
 
 
 
 
</body>
cs

 

 

 

 

 

-Session 사용법-

 

사용자로부터 넘어온 클라이언트에 대한 정보를 서버측에서 저장하는 개념이다

세션을 사용하는 이유는 페이지가 바뀌어도 계속해서 데이터를 유지하고 싶을때 사용한다.

 

 

메소드 이름 

리턴 타입 

 설명

getAttribute(String name)

 java.lang.Object

 세션 속성명이 name인 속성의 값을 Object 타입으로 리턴한다. 해당되는

속성명이 없을 경우에는 null 값을 리턴한다.

getAttributeNames( )

java.util.Enumeration 

세션 속성의 이름들을 Enumeration 객체 타입으로 리턴한다. 

getCreationTime( ) 

long 

1970년 1월 1일 0시 0초를 기준으로 하여 현재 세션이 생성된

시간까지 경과한 시간을 계산하여 1/1000초 값으로 리턴한다. 

getld( ) 

java.lang.String 

 세션에 할당된 고유 식별자를 String 타입으로 리턴한다.

getMaxInactiveInterval( )

int 

현재 생성된 세션을 유지하기 위해 설정된 세션 유지시간을 int형으로 리턴한다.

invalidate( ) 

void 

현재 생성된 세션을 무효화 시킨다.

removeAttribute(String.name) 

void 

세션 속성명이 name인 속성을 제거한다.

setAttribute(String name, Object value) 

void 

세션 속성명이 name인 속성에 속성값으로 value를 할당한다.

setMaxInactiveInterval(int interval)

void 

 세션을 유지하기 위한 세션 유지시간을 초 단위로 설정한다.

 

 

-Cookie와 Session의 차이-

 

구분 

Cookie

Session

사용 class 및 Interface 

Cookie class 

httpSession Interface 

저장되는 값 

문자열 형태만 저장 가능 

자바에서 사용되는 모든 객체 저장 가능 

저장 장소 

클라이언트에 저장 

SessionID만 클라이언트에 저장하고 실제적인 값은 서버에 저장 

 

 

 

-예제 및 출력 결과-

 

로그인 페이지 (SessionLoginForm.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
<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<body>
    <center>
        <h2>세션 로그인</h2>
        <!-- 쿠키는 아이디를 저장해서 읽어들일수 있지만 세션은 그럴수 없다. -->
        <form action="SessionLoginProc.jsp" method="post">
            <table width="400" border="1">
 
                <!-- 테이블을 생성 -->
                <tr height="50">
                    <td width="150">아이디</td>
                    <td width="250"><input type="text" name="id"></td>
                </tr>
 
                <tr height="50">
                    <td width="150">패스워드</td>
                    <td width="250"><input type="password" name="pass"></td>
                </tr>
 
                <tr height="50">
                    <td colspan="2" align="center"><input type="submit"
                        value="로그인"></td>
                </tr>
            </table>
        </form>
    </center>
 
</body>
</html>
cs

 

 

로그인을 처리하는 페이지 1 (request로 자료를 읽어들인다.) (SessionLoginProc.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=EUC-KR"
    pageEncoding="EUC-KR"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<body>
    <center>
 
        <h2>세션 로그인 처리 1</h2>
 
        <% 
    request.setCharacterEncoding("EUC-KR"); //한글 깨짐을 방지하기 위해 문자셋 설정
 
    //사용자로부터 데이터를 읽어들인다.
    String id = request.getParameter("id"); //id와 pass를 각각 변수에 저장
    String pass = request.getParameter("pass");
    
    //아이디와 패스워드를 저장
    session.setAttribute("id", id);
    session.setAttribute("pass", pass);
    
    //세션의 유지시간 설정
    session.setMaxInactiveInterval(60);
    
%>
        <h2>
            당신의 아이디는
            <%=id %>
            입니다. 패스워드는
            <%=pass %>
            입니다.
        </h2>
        <!-- 아이디 출력 -->
        <a href="SessionLoginProc2.jsp?id=<%=id %>&pass=<%=pass%>">다음페이지로
            이동</a>
 
        <!--  <a href="SessionLoginProc2.jsp?id=<%=id %>&pass=<%=pass%>">다음페이지로 이동</a> 이렇게 써도 값은 넘어가지만 패스워드가 url에 공개되서 보안상 문제가 있으므로 세션을 써야한다.-->
    </center>
 
</body>
</html>
cs

 

 

로그인을 처리하는 페이지 2 (Session로 자료를 읽어들인다.) (SessionLoginProc2.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
<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<body>
    <center>
        <h2>세션 로그인 처리 2</h2>
 
        <%
            //세션에 저장되어 있는 아이디와 비밀번호를 각각 변수에 저장함 세션에서 출력할때는 오브젝트 타입이기 때문에 (타입변환 실시)
            String id = (String) session.getAttribute("id");
            String pass = (String) session.getAttribute("pass");
        %>
        <h2>
            당신의 아이디는
            <%=id%>
            입니다.
        </h2>
        <h2>
            당신의 비밀번호는
            <%=pass%>
            입니다.
        </h2>
 
    </center>
</body>
</html>
cs

 

 

728x90
반응형
: