Latest web development tutorials

JSP 세션

HTTP 클라이언트 페이지를 검색 때마다 별도의 연결 서버를 열어야한다는 것을 의미 무 상태 프로토콜이며, 서버는 이전 클라이언트는 모든 정보를 요청 기록하지 않습니다.

클라이언트와 서버 세션을 유지하는 세 가지 방법이 있습니다 :


쿠키

네트워크 서버는 클라이언트의 다음 요청을 식별하는 각각의 클라이언트를 나타내는 쿠키로 고유 세션 ID를 할당 할 수있다.

많은 시간이 필요 브라우저 쿠키를 지원하지 않기 때문에, 효율적인 방법이 될 수 없습니다, 그래서 우리는 세션을 유지하기 위해이 방법을 사용하지 않는 것이 좋습니다.


숨겨진 양식 필드

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

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

이 항목은 양식이 제출 될 때, 지정된 이름과 값이 자동으로 GET 또는 POST 데이터에 포함된다는 것을 의미합니다. 브라우저 요청을 보낼 때마다, SESSION_ID 값은 다른 브라우저 궤적을 저장하는데 사용될 수있다.

이 방법은 효과적인 방법이 될 수 있지만, 양식 제출 이벤트가 <A HREF> 탭 하이퍼 링크를 클릭, 따라서 숨겨진 양식 필드가 일반 세션 추적을 지원하지 않습니다 생성하지 않습니다.


URL 재 작성

사용자는 세션 식별자를 연관시킬 수있는 데이터 서버에있어서, 상기 세션을 구별하기 위해 각각의 URL 뒤에 일부 추가 데이터를 추가 할 수있다.

예를 들어, HTTP : //w3cschool.cc/file.htm, 세션 id = 12345, 세션 식별자 세션 ID = 12345, 서버는 클라이언트를 식별하기 위해이 데이터를 사용할 수있다.

대조적으로, URL을 개서 쿠키를 지원하지 않는 브라우저도 작동 할 수 있더라도, 더 좋은 방법이지만, 단점은 그것이 단순 HTML 페이지 인 경우에도, 각 동적 URL에 대한 세션 ID를 지정해야한다는 것이다.


세션 객체

외부 상기 여러 가지 방법에 더하여, JSP 서블릿의 HttpSession 인터페이스는 정보의 모든 사용자의 액세스를 저장하는 사용자를 식별하는 데 사용 제공한다.

기본적으로, JSP 새의 HttpSession 객체가 자동으로 새 클라이언트에 대한 인스턴스화합니다, 세션 추적을 할 수 있습니다. 다음과 같이 금지 세션 추적, 명시 적으로 달성하기 위해 false로 페이지 지시문 세션 속성 값을 해제해야합니다 :

<%@ page session="false" %>

JSP 엔진 암시 세션 객체는 현상 제에 노출된다. 세션 객체를 제공하여, 개발자가 쉽게 저장하거나 데이터를 검색 할 수있다.

다음 표는 중요한 방법 세션 객체의 일부 목록입니다 :

SN 방법 설명
(1) 공공 개체 대해 getAttribute (문자열 이름)

반환 된 객체 세션 지정된 이름으로 바인드 된 객체는 null이 존재하지 않는 경우
공공 열거 대해 getAttributeNames ()

세션 개체 모든 개체 이름을 돌려줍니다
3 공공 긴 getCreationTime ()

세션 개체 년 1 월 1 일 1970 이른 아침의 날짜에서 밀리 초 단위로 시간을 만들어 돌려줍니다
4 공공 문자열 getId ()

세션 개체 ID를 반환
(5) 공공 긴 getLastAccessedTime ()

클라이언트가 1970 년 1 월 1 일부터 밀리 초, 이른 아침의 날짜를 마지막으로 방문한 시간을 반환
6 공공 INT getMaxInactiveInterval ()

최대 시간 간격 (초), 서블릿 컨테이너가이 시간에 오픈 세션을 유지합니다 반환
(7) 공공 무효의 무효화 ()

세션 무효화는 물건을 개별화하는 세션에 바인딩
8 공공 부울 isNew (

클라이언트가 세션에 참가하기를 거절 새 클라이언트 여부 경우, 또는 리턴
9 공공 무효 removeAttribute (문자열 이름)

지정된 세션 객체 이름을 제거
(10) 공공 무효의 setAttribute (문자열 이름, 개체 값)

지정된 이름과 값을 가지는 객체를 생성하고 세션에 바인딩하려면
(11) 공공 무효 setMaxInactiveInterval (INT 간격)

시간을 지정하려면, 초, 서블릿 컨테이너는이 기간 동안 유효한 세션을 유지합니다

JSP 세션 응용 프로그램

이 예는 작성 시간 및 마지막 액세스 시간을 얻기 위해의 HttpSession 객체를 사용하는 방법에 대해 설명합니다. 이 개체가 이미 존재하지 않는 경우 우리는 관련 요청 객체에 대한 새로운 세션 객체가 될 것입니다.

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="java.io.*,java.util.*" %>
<%
   // 获取session创建时间
   Date createTime = new Date(session.getCreationTime());
   // 获取最后访问页面的时间
   Date lastAccessTime = new Date(session.getLastAccessedTime());

   String title = "再次访问本教程实例";
   Integer visitCount = new Integer(0);
   String visitCountKey = new String("visitCount");
   String userIDKey = new String("userID");
   String userID = new String("ABCD");

   // 检测网页是否由新的访问用户
   if (session.isNew()){
      title = "访问本教程实例";
      session.setAttribute(userIDKey, userID);
      session.setAttribute(visitCountKey,  visitCount);
   } else {
	   visitCount = (Integer)session.getAttribute(visitCountKey);
	   visitCount += 1;
	   userID = (String)session.getAttribute(userIDKey);
	   session.setAttribute(visitCountKey,  visitCount);
   }
%>
<html>
<head>
<title>Session 跟踪</title>
</head>
<body>

<h1>Session 跟踪</h1>

<table border="1" align="center"> 
<tr bgcolor="#949494">
   <th>Session 信息</th>
   <th>值</th>
</tr> 
<tr>
   <td>id</td>
   <td><% out.print( session.getId()); %></td>
</tr> 
<tr>
   <td>创建时间</td>
   <td><% out.print(createTime); %></td>
</tr> 
<tr>
   <td>最后访问时间</td>
   <td><% out.print(lastAccessTime); %></td>
</tr> 
<tr>
   <td>用户 ID</td>
   <td><% out.print(userID); %></td>
</tr> 
<tr>
   <td>访问次数</td>
   <td><% out.print(visitCount); %></td>
</tr> 
</table> 
</body>
</html>

액세스에서 http보십시오 : // localhost를 : 8080 / testjsp / main.jsp를 처음 실행은 다음과 같은 결과를 얻을 것이다 :

다시 방문, 우리는 다음과 같은 결과를 얻을 것이다 :


세션 데이터를 삭제

사용자의 세션 데이터 처리를 완료하면 다음과 같은 옵션이 있습니다 :

  • 특정 속성을 제거합니다

    지정된 속성을 제거하기 위해 공공 무효 removeAttribute (문자열 이름) 메서드를 호출합니다.

  • 전체 대화를 삭제하려면 :

    전체 세션이 유효하게 공공 무효 무효 () 메서드를 호출합니다.

  • 세션 시간 설정 :

    세션 시간 제한을 설정하는 공공 무효 setMaxInactiveInterval (INT 간격) 메서드를 호출합니다.

  • 사용자 로그인 :

    서버의 Servlet2.4 지원되는 버전, 당신은 사용자가 로그 아웃 로그 아웃 () 메서드를 호출 할 수 있습니다 및 모든 관련 세션이 잘못되었습니다.

  • web.xml의 설정 파일 :

    Tomcat을 사용하는 경우, 다음의 web.xml 파일을 구성 할 수 있습니다 :

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

분 시간 제한은 톰캣의 기본 제한 시간은 30 분입니다.

getMaxInactiveInterval () 메소드에서 서블릿은 제한 시간 (초)을 반환합니다. 은 web.xml 15 분 동안 구성된 경우 getMaxInactiveInterval () 메서드는 900을 반환합니다.