JSP Servlet 기초(8) 세션

이번엔 jsp 세션에 대해 알아 보겠습니다

앞에서 웹브라우저와의 관계를 유지하는 수단으로 쿠키를 알아보았습니다.

세션도 쿠키와 마찬가지로 서버와의 관계를 유지하기 위한 수단입니다

하지만 쿠키와 달리 클라이언트에 값을 저장하는것이 아니라

서버상에 객체로 존재 합니다. 세션은 서버에서만 접근이 가능합니다. 

그래서 쿠키보다 보안이 좋고 저장할수 있는 데이터에 한계가 없습니다.


세션을 알아보기전 간단한 세션 관련 메소드를 알아 보겠습니다.

setAttribute() : 세션에 데이터를 저장합니다.

getAttribute() : 세션에서 데이터를 얻습니다.

getAttributeNames() : 세션에 저장되어 있는 모든 데이터의 

이름(유니크한 키값)을 얻습니다.

getId() : 세션의 유니크한 아이디를 얻습니다

isNew() : 세션이 최초 생성되었는지 이전에 생성된 세션인지를 구분합니다.

getMaxInactiveInterval() : 세션의 유효시간을 얻습니다 

가장 최근 요청 시점을 기준으로 카운트 됩니다.

removeAttribute() : 세션에서 특정 데이터를 제거합니다.

invalidate() : 세션의 모든 데이터를 삭제합니다.


이제 세션실습에 필요한 파일을 생성합니다.

세션을 생성할 sessionSet.jsp 와 세션을 확인할 sessionGet.jsp 를 만들어줍니다.


sessionSet.jsp 를 먼저 보면 


1
2
3
4
5
6
7
8
9
10
11
<body>
 
    <%
        session.setAttribute("SessionName""SessionValue");
        session.setAttribute("asdfg"12345);
    %>
    
    <a href="sessionGet.jsp">session Get</a>
 
</body>
 
cs




session.setAttribute로 세션을 set(정의) 해줍니다. 

세션의 이름은 SessionName , 그 안에 들어갈 값(value)는 

SessionValue 로 설정합니다

그밑에 세션은 이름을 asdfg, 값(value)은 12345 로 설정한다. 

이렇게 총 2개의 세션을 생성한것이다.


다음 하이퍼 링크로 session Get 을 눌러 sessionGet.jsp 로 이동되게 합니다.


sessionGet.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
<body>
 
    <%
        Object obj1 = session.getAttribute("SessionName");
        String SessionName = (String)obj1;
        out.println(SessionName +"<br />");
        
        Object obj2 = session.getAttribute("asdfg");
        Integer asdfg = (Integer)obj2;
        out.println(asdfg +"<br />");
        
        out.println("************************ <br />");
        
        String sName;
        String sValue;
        Enumeration enumeration = session.getAttributeNames();
        while(enumeration.hasMoreElements()){
            sName = enumeration.nextElement().toString();
            sValue = session.getAttribute(sName).toString();
            out.println("sName : " + sName + "<br />");
            out.println("sValue : " + sValue + "<br />");
        }
        
        out.println("************************ <br />");
        
        String sessionID = session.getId();
        out.println("sessionID : " + sessionID + "<br />");
        int sessionInter =  session.getMaxInactiveInterval();
        out.println("sessionInter : " + sessionInter + "<br />");
        
        out.println("************************ <br />");
        
        session.removeAttribute("SessionName");
        Enumeration enumeration1 = session.getAttributeNames();
        while(enumeration1.hasMoreElements()){
            sName = enumeration1.nextElement().toString();
            sValue = session.getAttribute(sName).toString();
            out.println("sName : " + sName + "<br />");
            out.println("sValue : " + sValue + "<br />");
        }
        
        out.println("************************ <br />");
        
        session.invalidate();
        if(request.isRequestedSessionIdValid()) {
            out.println("session valid");
        } else {
            out.println("session invalid");
        }
    %>
 
</body>
 
cs


먼저 4line에서 Object obj1 = session.getAttribute("SessionName");

을 보면 sessionSet.jsp 에서 SessionName 이라는 이름으로 만든 세션을

session.getAttribute 으로 받아온다. 받아온 데이터를

Object 형으로 obj1 이라는 이름으로 다시 저장하는데


전에 request.getParameter 로 파라미터값을 요청 받아오면 String 으로 반환되어 

값을 저장 할때 String 형으로 저장 했다 이와 마찬가지로

session.getAttribute 를 이용하여 세션값을 가져오면 Object 형으로 값이 반환되기

때문에 Object 형으로 값을 저장하는 것이다.


다음 obj1에 저장된 세션값을 다시 String 형으로 형변환 시킨후 

SessionName 라는 String 형식 의 값으로 저장한다.

String SessionName = (String)obj1;


out.println(SessionName +"<br />");을 통해 SessionName 의 값을 출력한다

출력값은 SessionValue 가 될것이다.


8,9,10 line 은 두번째 세션을 똑같이 정의한다.


다음 16line Enumeration enumeration = session.getAttributeNames();

에서 Enumeration 은 열거형 인터페이스로 저장된 값들을 직렬화로 저장한다.



즉 session.getAttributeNames 로 세션의 이름들을 불러와 enumeration에

저장한다음 반복문인 while 문으로 세션의 이름을 뽑아 내는거다.

while문 안의enumeration.hasMoreElements()는 요소가 존재 하면 true를

반환 한다 결국 while(true) 가 되기 때문에 반복실행 된다.

다음 sName 과 sVale 에 세션에 저장된 이름과 값을 저장한다.


sName = enumeration.nextElement().toString();
sValue = session.getAttribute(sName).toString();

enumeration.nextElement()을 사용하여 enumeration내의 요소(세션이름)를
toString 으로 문자열로 변환하여 SName 에 저장한다.

다음 sValue 에서는 sName 에 저장된 세션의 이름으로부터 해당 세션의 값을
가져와서 toString 으로 문자열 변환후 sValue 에 저장한다.

다음 sName 과 sValue 를

out.println("sName : " + sName + "<br />");
out.println("sValue : " + sValue + "<br />");

출력한다

다음 String sessionID = session.getId();
        out.println("sessionID : " + sessionID + "<br />");

getId()를 통해 세션의 유니크한 ID 값을 얻어와 출력한다

int sessionInter =  session.getMaxInactiveInterval();
        out.println("sessionInter : " + sessionInter + "<br />");

에서는 세션의 유효기간을 얻어와 출력한다 세션의 유효기간은
따로 설정 하지않는한 서버에 기본적으로 저장된1800(30분) 으로 출력된다.

33line 에서는 SessionName 라는이름을 가진 세션을 삭제하는것이다.
그후 열거형인터페이스로 다시 세션들의 이름들을 불러와
출력한다. SessionName 이름의 세션이 삭제 되었으므로
출력값은 asdfg 의이름을 가진 세션값만 출력될것이다.

다음 44line 에서는 session.invalidate(); 메소드로 모든 세션을 삭제하기
때문에 출력문에 아무런 세션도 출력되지 못할것이다.

sessionSet.jsp 를 실행시켜보면 결과값은


위와같이 출력될것이다.




댓글

Designed by JB FACTORY