JSP-세션 추적

이 장에서는 JSP의 세션 추적에 대해 설명합니다. HTTP는 "상태 비 저장"프로토콜입니다. 즉, 클라이언트가 웹 페이지를 검색 할 때마다 클라이언트는 웹 서버에 대한 별도의 연결을 열고 서버는 이전 클라이언트 요청에 대한 기록을 자동으로 유지하지 않습니다.

웹 클라이언트와 서버 간의 세션 유지

이제 웹 클라이언트와 웹 서버 간의 세션을 유지하기위한 몇 가지 옵션에 대해 논의하겠습니다.

쿠키

웹 서버는 고유 한 세션 ID를 각 웹 클라이언트에 쿠키로 할당 할 수 있으며 클라이언트의 후속 요청에 대해 수신 된 쿠키를 사용하여 인식 할 수 있습니다.

브라우저가 때때로 쿠키를 지원하지 않기 때문에 이것은 효과적인 방법이 아닐 수 있습니다. 세션을 유지하기 위해이 절차를 사용하지 않는 것이 좋습니다.

숨겨진 양식 필드

웹 서버는 다음과 같이 고유 한 세션 ID와 함께 숨겨진 HTML 양식 필드를 보낼 수 있습니다.

<input type = "hidden" name = "sessionid" value = "12345">

이 항목은 양식이 제출 될 때 지정된 이름과 값이 자동으로 GET 아니면 그 POST데이터. 웹 브라우저가 요청을 다시 보낼 때마다session_id 값을 사용하여 다른 웹 브라우저를 추적 할 수 있습니다.

이는 세션을 추적하는 효과적인 방법이 될 수 있지만 일반 (<A HREF...>) 하이퍼 텍스트 링크를 클릭해도 양식이 제출되지 않으므로 숨겨진 양식 필드도 일반 세션 추적을 지원할 수 없습니다.

URL 재 작성

각 URL 끝에 추가 데이터를 추가 할 수 있습니다. 이 데이터는 세션을 식별합니다. 서버는 해당 세션 식별자를 해당 세션에 대해 저장 한 데이터와 연결할 수 있습니다.

예를 들어 http://tutorialspoint.com/file.htm;sessionid=12345, 세션 식별자는 다음과 같이 첨부됩니다. sessionid = 12345 클라이언트를 식별하기 위해 웹 서버에서 액세스 할 수 있습니다.

URL 재 작성은 세션을 유지하는 더 좋은 방법이며 쿠키를 지원하지 않는 브라우저에서 작동합니다. 여기서 단점은 페이지가 단순한 정적 HTML 페이지이지만 세션 ID를 할당하기 위해 모든 URL을 동적으로 생성해야한다는 것입니다.

세션 개체

위에서 언급 한 옵션 외에도 JSP는 서블릿에서 제공하는 HttpSession 인터페이스를 사용합니다. 이 인터페이스는 사용자를 식별하는 방법을 제공합니다.

  • 한 페이지 요청 또는
  • 웹 사이트 방문 또는
  • 해당 사용자에 대한 정보 저장

기본적으로 JSP에는 세션 추적이 활성화되어 있으며 새 HttpSession 객체가 각각의 새 클라이언트에 대해 자동으로 인스턴스화됩니다. 세션 추적을 비활성화하려면 다음과 같이 페이지 지시문 세션 속성을 false로 설정하여 명시 적으로 해제해야합니다.

<%@ page session = "false" %>

JSP 엔진은 암시 적 방법을 통해 JSP 작성자에게 HttpSession 객체를 노출합니다. session목적. 이후session 객체가 이미 JSP 프로그래머에게 제공된 경우 프로그래머는 초기화 또는 초기화없이 객체에서 데이터 저장 및 검색을 즉시 시작할 수 있습니다. getSession().

다음은 세션 객체를 통해 사용할 수있는 중요한 방법의 요약입니다.

S. 아니. 방법 및 설명
1

public Object getAttribute(String name)

이 메서드는이 세션에서 지정된 이름으로 바인딩 된 개체를 반환하거나 이름 아래에 바인딩 된 개체가 없으면 null을 반환합니다.

2

public Enumeration getAttributeNames()

이 메서드는이 세션에 바인딩 된 모든 개체의 이름을 포함하는 String 개체의 열거 형을 반환합니다.

public long getCreationTime()

이 메서드는 GMT 1970 년 1 월 1 일 자정 이후로 측정 된이 세션이 생성 된 시간을 반환합니다.

4

public String getId()

이 메서드는이 세션에 할당 된 고유 식별자가 포함 된 문자열을 반환합니다.

5

public long getLastAccessedTime()

이 메서드는 1970 년 1 월 1 일 자정 (GMT) 이후의 밀리 초 수로 클라이언트가이 세션과 관련된 요청을 마지막으로 보낸 시간을 반환합니다.

6

public int getMaxInactiveInterval()

이 메소드는 서블릿 컨테이너가 클라이언트 액세스 사이에이 세션을 열린 상태로 유지하는 최대 시간 간격 (초)을 리턴합니다.

7

public void invalidate()

이 메서드는이 세션을 무효화하고 여기에 바인딩 된 모든 개체를 바인딩 해제합니다.

8

public boolean isNew()

이 메서드는 클라이언트가 아직 세션에 대해 알지 못하거나 클라이언트가 세션에 참여하지 않기로 선택한 경우 true를 반환합니다.

9

public void removeAttribute(String name)

이 메서드는이 세션에서 지정된 이름으로 바인딩 된 개체를 제거합니다.

10

public void setAttribute(String name, Object value)

이 메서드는 지정된 이름을 사용하여 개체를이 세션에 바인딩합니다.

11

public void setMaxInactiveInterval(int interval)

이 메소드는 서블릿 컨테이너가이 세션을 무효화하기 전에 클라이언트 요청 사이의 시간 (초)을 지정합니다.

세션 추적 예

이 예에서는 HttpSession 개체를 사용하여 세션의 생성 시간과 마지막으로 액세스 한 시간을 찾는 방법을 설명합니다. 요청이없는 경우 새 세션을 요청과 연결합니다.

<%@ page import = "java.io.*,java.util.*" %>
<%
   // Get session creation time.
   Date createTime = new Date(session.getCreationTime());
   
   // Get last access time of this Webpage.
   Date lastAccessTime = new Date(session.getLastAccessedTime());

   String title = "Welcome Back to my website";
   Integer visitCount = new Integer(0);
   String visitCountKey = new String("visitCount");
   String userIDKey = new String("userID");
   String userID = new String("ABCD");

   // Check if this is new comer on your Webpage.
   if (session.isNew() ){
      title = "Welcome to my website";
      session.setAttribute(userIDKey, userID);
      session.setAttribute(visitCountKey,  visitCount);
   } 
   visitCount = (Integer)session.getAttribute(visitCountKey);
   visitCount = visitCount + 1;
   userID = (String)session.getAttribute(userIDKey);
   session.setAttribute(visitCountKey,  visitCount);
%>

<html>
   <head>
      <title>Session Tracking</title>
   </head>
   
   <body>
      <center>
         <h1>Session Tracking</h1>
      </center>
      
      <table border = "1" align = "center"> 
         <tr bgcolor = "#949494">
            <th>Session info</th>
            <th>Value</th>
         </tr> 
         <tr>
            <td>id</td>
            <td><% out.print( session.getId()); %></td>
         </tr> 
         <tr>
            <td>Creation Time</td>
            <td><% out.print(createTime); %></td>
         </tr> 
         <tr>
            <td>Time of Last Access</td>
            <td><% out.print(lastAccessTime); %></td>
         </tr> 
         <tr>
            <td>User ID</td>
            <td><% out.print(userID); %></td>
         </tr> 
         <tr>
            <td>Number of visits</td>
            <td><% out.print(visitCount); %></td>
         </tr> 
      </table> 
   
   </body>
</html>

이제 위의 코드를 main.jsp 액세스를 시도 http://localhost:8080/main.jsp. URL을 실행하면 다음 결과가 표시됩니다.

내 웹 사이트에 오신 것을 환영합니다

Session Information

세션 정보
신분증 0AE3EC93FF44E3C525B4351B77ABB2D5
생성 시간 2010 년 6 월 8 일 화요일 17:26:40 GMT + 04 : 00
마지막 액세스 시간 2010 년 6 월 8 일 화요일 17:26:40 GMT + 04 : 00
사용자 ID ABCD
방문 횟수 0

이제 동일한 JSP를 두 번째로 실행하면 다음과 같은 결과가 나타납니다.

내 웹 사이트에 오신 것을 환영합니다.

Session Information

정보 유형
신분증 0AE3EC93FF44E3C525B4351B77ABB2D5
생성 시간 2010 년 6 월 8 일 화요일 17:26:40 GMT + 04 : 00
마지막 액세스 시간 2010 년 6 월 8 일 화요일 17:26:40 GMT + 04 : 00
사용자 ID ABCD
방문 횟수 1

세션 데이터 삭제

사용자의 세션 데이터를 완료하면 몇 가지 옵션이 있습니다.

  • Remove a particular attribute − 당신은 public void removeAttribute(String name) 특정 키와 관련된 값을 삭제하는 메서드입니다.

  • Delete the whole session − 당신은 public void invalidate() 전체 세션을 버리는 방법.

  • Setting Session timeout − 당신은 public void setMaxInactiveInterval(int interval) 세션에 대한 시간 제한을 개별적으로 설정하는 방법.

  • Log the user out − 서블릿 2.4를 지원하는 서버는 다음을 호출 할 수 있습니다. logout 클라이언트를 웹 서버에서 로그 아웃하고 모든 사용자에게 속한 모든 세션을 무효화합니다.

  • web.xml Configuration − Tomcat을 사용하는 경우 위에서 언급 한 방법 외에 다음과 같이 web.xml 파일에서 세션 타임 아웃을 설정할 수 있습니다.

<session-config>
   <session-timeout>15</session-timeout>
</session-config>

제한 시간은 분으로 표시되며 Tomcat에서 기본 제한 시간 인 30 분을 대체합니다.

그만큼 getMaxInactiveInterval( )서블릿의 메소드는 해당 세션의 시간 초과 기간을 초 단위로 반환합니다. 따라서 세션이 web.xml에서 15 분 동안 구성된 경우getMaxInactiveInterval( ) 900을 반환합니다.