BackEnd/WEB

세션트래킹_국비_DAY66

Leo.K 2022. 6. 3. 17:28

[ 세션 트래킹의 정의 ]

서블릿이나 JSP로 작성된 웹 페이지들 간의 클라이언트 상태유지를 위해 사용되는 기술을 의미한다. 

서로 관련이 없던 페이지들간에 연관성을 설정하는 방법이다.

[ 세션 트래킹의 등장 배경 ]

HTTP프로토콜은 클라이언트와 서버간 요청과 응답이 실행되면 연결이 종료된다. 이것은 전 페이지에서 수행했던 작업을 다른 페이지에서 인식할 수 없음을 의미한다. 전 페이지에서 수행했던 작업을 다른 페이지에서도 인식할 수 있게 구현 해야 한다.

[ 구현방법 ]

  • input type="hidden"태그 이용
  • GET방식을 이용한 URL파라미터 이용
  • 쿠키 이용 
  • 세션 이용

 

[ 쿠키 ]

정의

  • HTTP한계(요청에 대한 응답을 하면 연결이 끊김)를 극복할 수 있도록 웹 사이트의 방문기록을 클라이언트(브라우저)에 저장하여 사용자와 웹 사이트 사이를 매개해주는 정보이다.

특징 

  • 정보가 클라이언트에 저장된다.
  • 용량에 제한이 있다. 
  • 보안이 취약하다 
  • 클라이언트에 의해서 사용 유무가 결정된다.
  • 메인 데이터가 아니고 세션 트래킹을 위한 보조 데이터이다. 
  • 도메인당 쿠키가 생성된다. 

용도 

  • 사이트의 고객맞춤 정보 제공(타깃 마케팅)
  • 로그인시 'ID저장' 기능 구현
  • 팝업창에 대해서 '오늘은 더 이상 창 열지 않기' 구현 등에 사용된다. 
  Persistence 쿠키 Session 쿠키
저장위치 파일로 저장 브라우저 메모리에 저장
만료시기 사용자가 쿠키를 삭제하거나 쿠키 설정값이 만료된 경우 브라우저를 종료한 경우
초기 접속시 
전송 여부
초기 접속 시 전송된다. 초기 접속 시 전송되지 않는다.
용도 사이트 재 접속시 속성값을 저장하기 위해 사용한다.(팝업, 아이디) 사이트 접속 시 인증정보를 유지하기 위해 사용한다.

서버가 사용자에게 할당하는 세션ID값을 사용자는 클라이언트, 즉 쿠키에 저장하면서 페이지를 이동한다. 서버에서는 사용자가 저장한 쿠키 값을 확인해서 동일한 사용자인지 확인한다.

 

[ 쿠키의 생성과 저장 ]

1
2
3
4
5
6
7
8
9
<%
    //쿠키 생성
    //                           key    value
    //                           name   value
    Cookie cookie = new Cookie("A""A.jsp"); 
 
    //쿠키 저장
    response.addCookie(cookie);
%>
cs

브라우저 -> 개발자모드(F12) -> application을 확인해보면 아래와 같이 쿠키가 생성되어 저장되어 있다.

 

[ 쿠키값을 이용하여 간단한 팝업창 만들어보기 ]

테스트시 주의사항 -> 쿠키 정보는 브라우저 자체에 저장되는 것이기 때문에 쿠키를 삭제시키려면 브라우저 내에 있는 모든 페이지를 종료 해야 한다.

A,B,C파일을 실행시킴과 동시에 브라우저 내에 쿠키를 생성해서 저장해주었다. 

특별히 B라는 쿠키만 1분의 유효시간을 지정해주었는데, 이를 통해 쿠키의 소멸시간을 확인할 수 있다.

[A.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"%>
    
<%
    //쿠키 생성
    //                           key    value
    //                           name   value
    Cookie cookie = new Cookie("A", "A.jsp"); 
 
    //쿠키 저장
    response.addCookie(cookie);
 
%>
 
<%@ include file="popup.jsp" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
여기는 A.jsp
<a href="B.jsp">여기를 누르면 B.jsp로 이동</a>
</body>
</html>
cs

[B.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
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    
<%
    //쿠키 생성
    //                           key    value
    //                           name   value
    Cookie cookie = new Cookie("B", "B.jsp"); 
 
    //유효시간 설정
    cookie.setMaxAge(60);
 
 
    //쿠키 저장
    response.addCookie(cookie);
 
%>
 
<%@ include file="popup.jsp" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
여기는 B.jsp
<a href="C.jsp">여기를 누르면 C.jsp로 이동</a>
</body>
</html>
cs

[C.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"%>
    
<%
    //쿠키 생성
    //                           key    value
    //                           name   value
    Cookie cookie = new Cookie("C", "C.jsp"); 
 
    //쿠키 저장
    response.addCookie(cookie);
 
%>
 
<%@ include file="popup.jsp" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
여기는 C.jsp
<a href="A.jsp">여기를 누르면 A.jsp로 이동</a>
</body>
</html>
cs

[popup.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
51
52
53
54
55
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
 
<%
    //Cookie 정보를 읽어온다. 현재 브라우저 상에 저장된 모든 쿠키를 배열 형태로 읽어온다.
    Cookie [] cookie_array = request.getCookies();
    String html="";
    if(cookie_array != null){
        
        
        StringBuffer sb = new StringBuffer("<h4>[방문 페이지]</h4>");
        for(Cookie c : cookie_array){
            String name  = c.getName();
            String value = c.getValue();
            
            //System.out.printf("[%s]:[%s]\n", name, value);
            
            if(!name.equals("JSESSIONID")){
                //out.print(name + "/" + value + "<br>");
                sb.append(String.format("<a href='%s'>%s</a><br>", value, name));
            }
        }
        
        html = sb.toString();
    }
    
 
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<style>
    #disp{
        position: absolute;
        top: 30px;
        right: 50px;
        width: 200px;
        height: 200px;
        padding: 30px;
        background-color: black;
        color: yellow;
    }
    
    a{
        color: red;
        text-decoration: none;
    }
</style>
</head>
<body>
    <div id="disp"><%= html %></div>
</body>
</html>
cs

 

[세션]

오늘은 세션의 존재를 인식하고 다음주에는 세션을 응용해서 로그인/아웃을 구현할 것이다.

유저별로 세션값이 할당이 되는데, 이것은 개발자가 만들어주는 것이 아니라 서버가 생성해주는 것이다.

세션에 대한 정보는 항상 사용자의 요청정보를 담고 있는 request객체에서 읽어온다.

정의

  • HTTP의 한계를 극복할 수 있도록 웹 사이트의 방문 기록을 서버에 저장하여 사용자와 웹 사이트 사이를 매개해 주는 정보이다. 

특징 

  • 정보가 서버에 저장된다. 
  • 세션 구현은 쿠키를 이용한다. 
  • 쿠키보다 보안에 유리하다. 
  • 서버에 부담이 될 수 있다. 
  • 브라우저마다 유일한 세션(세션ID)이 하나씩 생긴다. 
  • 서버에 저장된 정보는 유효시간을 갖는다. 기본적으로 30분(1800초)동안 유효하다.
  • 세션에는 최소한의 정보만을 저장하고, 불편하더라도 페이지 이동시에 수시로 세션체킹을 해주는 것이 서버쪽에 부담을 줄여줄 수 있다. 아주 중요하면서 예민한 문제이다.

용도 

  • 로그인 기능 구현 
  • 쇼핑몰의 장바구니 구현 등에 사용된다.

이용 

  • javax.servlet.http.HttpSession을 이용한다. 
  • 세션 생성과 생성된 세션을 사용하는 메소드가 동일하다. 
  • getSession() : 세션이 있으면 리턴하고, 없으면 새로 생성해서 리턴한다. 
  • getSession(true) : 세션이 있으면 리턴하고 없으면 새로 생성해서 리턴한다. 
  • getSession(false) : 세션이 있으면 리턴하고 없으면 null을 리턴한다.

 

HttpSession 메소드 

로그아웃을 구현했을 때, 나는 invalidate함수를 사용해서 세션을 통째로 날려버리고 로그인할때마다 세션을 새로 생성해주는 방식으로 했었는데, 이 방식은 위험하다고 한다. 세션을 살려둔채로 두라고 하는데, 후에 실습을 하게되면 정리하도록 하겠다. removeAttribute를 사용한다고 한다.

'BackEnd > WEB' 카테고리의 다른 글

파일업로드_국비_DAY67  (0) 2022.06.07
백준[자바]_2206_벽부수고이동하기_BFS_너비우선탐색  (0) 2022.06.07
AJAX_국비DAY65~66  (0) 2022.06.02
AJAX_국비DAY64  (0) 2022.05.31
웹DB_비번, 줄바꿈처리,AJAX_DAY63  (0) 2022.05.30