ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • JSP | Session
    JAVA/JSP 2020. 2. 22. 22:36

    Session

    클라이언트에 세션 ID를 부여해서 클라이언트를 구분하는 방법


    Session 개요

    • 클라이언트와 서버 간 상태를 유지하는 방법 중 하나
    • 클라이언트가 처음 접속했을 때 세션 ID를 부여하고 서버에 세션 ID 저장
    • 클라이언트가 재접속했을 때 부여된 세션 ID를 이용해서 클라이언트 구분
    • 쿠키에 비해 상태 유지가 훨씬 안정적이고 보안상의 문제도 해결
    • 세션은 브라우저당 1개가 생성되며 웹 컨테이너에 저장됨
    • 세션은 HashMap 컬렉션 형태로 key-value 저장
    • 세션의 기본 유지 시간은 30분
    • JSP에서는 session 내장 객체 사용

    Cookie & Session 비교

    쿠키와 세션은 둘 다 클라이언트 상태 유지를 위한 기능을 제공
    그러나 다른 점이 많기 때문에 그 차이에 대해 정리

    구분 쿠키 세션
    저장 위치 클라이언트 서버
    저장 형식 텍스트 Object
    만료 시점 쿠키 저장 시 설정 가능
    설정하지 않는 경우 브라우저 종료 시 소멸
    클라이언트가 로그아웃 하거나
    설정한 시간 동안 반응이 없을 경우 만료
    리소스 클라이언트 리소스 사용 서버 리소스 사용
    용량 제한 한 도메인 당 20개
    쿠리 하나당 4KB
    총 300개
    서버가 허용하는 용량

    Session Method

    메소드 설명
    void setAttribute(String name, Object value) 세션의 name 속성에 value 속성값 지정
    로그인 아이디를 설정할 때 사용
    void setMaxInactiveInterval(int interval) 세션 유지 시간을 초 단위로 설정
    Object getAttribute(String name) name 속성의 값을 Object 타입으로 리턴
    속성명이 없는 경우 null 리턴
    Enumeration getAttribute() 속성의 이름들을 Enumeration 객체 타입으로 리턴
    long getCreationTime() 1970년 1월 1일 0시 0초를 기준으로 현재 세션이 생성된 시간까지 경과한 시간을 1/1000초 값으로 리턴
    String getId() 세션에 할당된 고유 식별자를 String 타입으로 리턴
    브라우저를 구분하기 위해 필요하며 각 세션마다 다른 번호가 부여됨
    int getMaxInactiveInterval() 현재 세션에 설정된 유지 시간 반환
    void invalidate() 현재 생성된 세션 무효화
    void removeAttribute(String name) 속성명이 name인 속성 제거

    JSP에서 Session 사용

    Session 속성 설정

    javax.sevlet.http 패키지의 HttpSession 인터페이스를 구현해서 사용
    JSP에는 session 내장 객체가 있기 때문에 따로 생성하지 않아도 됨

    session.setAttribute(String name, Object value);
    • name 속성에 value 속성값 할당
    • 세션의 속성값으로는 객체 형태만 올 수 있음
    • session 객체는 웹 브라우저와 매핑되므로 해당 웹 브라우저를 닫지 않는 한
      같은 창에서 열린 페이지는 모두 같은 session 객체를 공유함

    Session 속성을 이용해서 정보 유지

    <!-- getAttribute(String name) -->
    String name = (String)session.getAttribute("name");
    • 속성명에 해당하는 속성값 반환
    • getAttribute() 메소드의 리턴 타입이 Object 이기 때문에
      저장을 원하는 변수의 자료형으로 형 변환을 해주어야 함

    Session 무효화

    session.invalidate();
    • 세션의 모든 속성이 제거되고 연결이 해제됨

    예제

    session의 속성을 설정해서 정보를 유지하고
    form에 입력한 데이터 출력 후 session 유지를 해제하는 예제

    sessionForm.jsp

    id와 pwd를 입력받는 JSP 페이지
    데이터를 서버에 POST 방식으로 전달하고
    sessionTest1.jsp 페이지로 이동

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>id pwd 입력</title>
    </head>
    <body>
       <form method="post" action="sessionTest1.jsp">
          id:<input type="text" name="id"><p>
          pw:<input type="password" name="pwd"><p>
         <input type="submit" value="로그인">
       </form>
    </body>
    </html>

    sessionTest1.jsp

    session 속성을 설정하고 form에 좋아하는 스포츠와 계절을 입력받는 페이지
    입력 데이터를 POST 방식으로 서버에 전달
    sesstionTest2.jsp로 페이지 이동

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>파라미터값 처리, 세션 설정</title>
    </head>
    <body>
        <%
            // 회원가입을 했다고 가정하고 id와 pwd 값을 전달 받음
            String id = request.getParameter("id");
            String pwd = request.getParameter("pwd");
            System.out.println("id: " + id + ", pwd: " + pwd);
    
            // 세션 설정
            session.setAttribute("idKey", id);
    
            // 세션 유지 기간 설정, 초 단위
            session.setMaxInactiveInterval(60);
        %>
    
        <form method="post" action="sessionTest2.jsp">
            <h2>가장 좋아하는 스포츠를 선택하세요</h2>    <br>
            <input type="radio" name="sports" value="농구">농구 
            <input type="radio" name="sports" value="유도">유도
            <input type="radio" name="sports" value="야구">야구
            <input type="radio" name="sports" value="이종격투기">이종격투기
    
            <br>
            <h2>가장 좋아하는 계절을 선택하세요</h2><br>
                <select name="season">
                <option value="봄">봄</option>
                <option value="여름">여름</option>
                <option value="가을">가을</option>
                <option value="겨울">겨울</option>
            </select> 
            <input type="submit" value="전송">
        </form>
    </body>
    </html>

    sessionTest2.jsp

    세션 정보를 유지하며 세션 정보와
    sessionTest1.jsp 에 입력한 데이터 출력

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>세션 유지, 세션 정보 출력</title>
    </head>
    <body>
        <%
            request.setCharacterEncoding("utf-8");
            String sports = request.getParameter("sports");
            String season = request.getParameter("season");
    
            // 세션 정보 가져오기
            // idKey 속성명에 해당하는 속성값 반환
            String id = (String) session.getAttribute("idKey");
    
            // 세션 고유 id 반환
            String sessionId = session.getId();
    
            // 세션 유지 시간 반환
            int interval = session.getMaxInactiveInterval();
    
            // id 값이 있는 경우 출력
            if (id != null) {
        %>
        <b><%=id%></b>님이 좋아하는 스포츠와 계절은?
        <br />
        <b><%=sports%>와 <%=season%>입니다.</b>
        <br />
        세션 id:<%=sessionId%>
        <br /> 
        세션 유지 시간: <%=interval%>
        <%
            // 출력 후 세션 연결 해제
            session.invalidate();
            } else { // id가 null인 경우
                out.println("세션 연결 시간 초과. 재로그인 해주세요.");    
            }
        %>
    
    </body>
    </html>

    결과

    sessionForm.jsp

     

    sessionTest1.jsp

     

    sessionTest2.jsp

     

    sessionTest2.jsp 세션 만료


    HTTP 프로토콜에서 데이터를 유지하는 방법 중 하나인 세션에 대해 살펴보았습니다.

    JSP에서는 session 내장 객체를 사용하며 브라우저당 1개의 객체를 공유하게 됩니다.

    세션에 속성을 부여해서 클라이언트를 구분할 수 있으며 세션 유지 시간을 설정할 수도 있습니다.

    쿠키와 세션이 JSP에서 사용되는 예제를 다루긴 했지만
    쿠키와 세션은 다른 프로그래밍 언어에서도 사용되기 때문에
    간략하게나마 알아두면 다른 언어에서 쿠키와 세션을 사용하게 될 때도 도움이 될 것입니다.

    'JAVA > JSP' 카테고리의 다른 글

    JSP | 에러 처리 with XML  (0) 2020.02.22
    JSP | XML 기초 문법 & 서블릿 설정  (0) 2020.02.22
    JSP | Cookie  (0) 2020.02.22
    JSP | JavaBean Action Tag 자바빈 연동 액션 태그  (0) 2020.02.20
    JSP | JavaBean 자바빈  (0) 2020.02.20

    댓글

Designed by Tistory.