본문 바로가기

JSP & Servlet

[세션] Session 문법, 간단한 로그인 예제

세션

- Session -


웹브라우저와 서버와의 관계를 유지하기 위한 수단으로 쿠키와 세션이 있다.

쿠키는 클라이언트의 특정 위치에 저장되고

세션은 서버상에 객체로 저장된다는 차이점이 있다.


세션은 서버에서만 접근이 가능하기 때문에 보안성이 좋고 저장할 수 있는 데이터의 한계가 없다.



- 세션 관련 메소드 -


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

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

getAttributeNames() : 세션에 저장되어 있는 모든 데이터의 이름(키값)을 얻는다. (Enumeration 타입으로 주로 받음)

getID() : 자동 생성된 세션의 유니크한 아이디를 얻는다.

isNew() : 세션이 최초 생성되었는지 이전에 생성된 세션인지를 판별한다.

getMaxInactiveInterval() : 세션의 유효시간을 얻는다. 가장 최근 요청시점을 기준으로 카운트된다.

server파일 내의 web.xml 파일에서 변경 가능하다.

removeAttribute() : 세션에서 특정 데이터를 삭제한다.

Invalidate() : 세션의 모든 데이터를 삭제한다.



<sessionInit.jsp>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
    <%
        session.setAttribute("mySessionName""mySessionData");
        session.setAttribute("myNum"12345);
    %>
    
    <a href="sessionGet.jsp">session Get</a>
</body>
</html>
cs


"mySessionData"라는 문자열 데이터가 저장된 "mySessionName" 이름의 세션과

12345 라는 정수형 데이터가 저장된 "myNum" 이름의 세션을 저장한다.



<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
54
55
56
57
58
59
60
61
62
<%@ page import="java.util.Enumeration" %>
<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
 
    <%
        Object ob1 = session.getAttribute("mySessionName");
        String mySessionName = (String)ob1;
        out.println(mySessionName +"<br/>");
        
        Object ob2 = session.getAttribute("myNum");
        Integer myNum = (Integer)ob2;
        out.println(myNum +"<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();    //세션의 유효시간 (기본설정:30분)
        out.println("MaxInactiveInterval : "+sessionInter+"<br/>");
        
        out.println("******************<br/>");
        
        session.removeAttribute("mySessionName");
        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>
</html>
cs



<Login.html>

html의 폼태그로 간단하게 아이디와 비밀번호 입력을 받도록 구성해보았다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="EUC-KR">
<title>Login in session</title>
</head>
<body>
    <form action="loginOK.jsp" method="post">
        아이디 : <input type="text" name="id" size="10"><br/>
        비밀번호 : <input type="password" name="pw" size="10"><br/>
        <input type="submit" value="로그인">
    </form>
</body>
</html>
cs




<loginOK.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
<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
 
    <%! String id, pw; %>
    <%
        id = request.getParameter("id");
        pw = request.getParameter("pw");
        
        if(id.equals("abcde"&& pw.equals("12345")) {
            session.setAttribute("id", id);
            response.sendRedirect("welcome.jsp");
        } else {
            response.sendRedirect("Login.html");
        }
    %>
 
</body>
</html>
cs



<welcome.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 import="java.util.Enumeration"%>
<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
 
    <%
        Enumeration enumeration = session.getAttributeNames();
        int i = 0;
        while(enumeration.hasMoreElements()) {
            i++;
            
            String sName = enumeration.nextElement().toString();
            String sValue = (String)session.getAttribute(sName);
            
            if(sValue.equals("abcde")) out.println(sValue + "님, 안녕하세요! <br/>");
        }
    %>
    <a href="logout.jsp">로그아웃</a>
    
</body>
</html>
cs



<logout.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 import="java.util.Enumeration"%>
<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
    <%
        Enumeration enumeration = session.getAttributeNames();
        while(enumeration.hasMoreElements()) {
            String sName = enumeration.nextElement().toString();
            String sValue = (String)session.getAttribute(sName);
            
            if(sValue.equals("abcde")) session.removeAttribute(sName);
        }
    %>
    
    <a href="sessionTest.jsp">세션 테스트 페이지로</a>
</body>
</html>
cs



<sessionTest.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
<%@page import="java.util.Enumeration"%>
<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
    <%
    // session.jsp 모든 세션을 찍어보는 파일입니다.
    Enumeration enumeration = session.getAttributeNames();
    int i = 0;
    while(enumeration.hasMoreElements()) {
        i++;
        
        String sName = enumeration.nextElement().toString();
        String sValue = (String)session.getAttribute(sName);
        
        out.println("sName : "+ sName + "<br/>");
        out.println("sValue : " + sValue + "<br/>");
        
    }
    if(i==0out.println("모든 세션이 삭제되었습니다.");
    %>
</body>
</html>
cs