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을 반환합니다.