Latest web development tutorials

JSP Session

HTTP это протокол, который означает, что каждый раз, когда клиент получает страницы, необходимо открыть отдельный сервер подключения, сервер не записывает предыдущий клиент запрашивает какую-либо информацию.

Есть три способа, чтобы сохранить клиента и сервера сеансов:


печенье

Сетевой сервер может присвоить уникальный идентификатор сеанса, как куки для представления каждого клиента, чтобы определить следующий запрос клиента.

Это не может быть эффективным способом, потому что много времени не обязательно поддерживает куки браузера, поэтому мы не рекомендуем использовать этот метод для поддержания сеанса.


Скрытые поля формы

Веб-сервер может послать скрытые HTML поля формы и уникальный идентификатор сеанса, как это:

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

Эта запись означает, что, когда форма была отправлена, указанное имя и значение будет автоматически включаются в GET или POST данных. Всякий раз, когда браузер посылает запрос, session_id значение может быть использовано для сохранения другой траектории браузера.

Такой подход может быть эффективным способом, но не создает событие представления формы Нажмите <A href> вкладку гиперссылки, и поэтому скрытые поля формы не поддерживают общий отслеживания сеанса.


URL переписывания

Можно добавить некоторые дополнительные данные за каждый URL, чтобы отличить сессию, в соответствии с сервером данных может быть связан идентификатор сеанса.

Например, HTTP: //w3cschool.cc/file.htm; SessionID = 12345, идентификатор SessionID = 12345 сеанс, сервер может использовать эти данные для идентификации клиента.

В отличие от этого, URL переписывания является лучшим способом, даже если браузер не поддерживает куки также может работать, но недостатком является то, что необходимо указать идентификатор сеанса для каждого динамического URL, даже если это простой HTML-страницы.


объекты сессии

В дополнение к указанным выше нескольких методов вне, JSP интерфейс сервлет HttpSession предоставляет использовать для идентификации пользователя, чтобы сохранить все права доступа пользователя к информации.

По умолчанию, JSP позволяет отслеживать сессии, новый объект HttpSession автоматически для нового клиента экземпляра. Отслеживание Запрет сеанса должен явно отключить его на страницу директивы значения атрибута сеанса к ложным достичь, следующим образом:

<%@ page session="false" %>

JSP двигатель объект неявного сеанса подвергается разработчику. Предоставляя объект сеанса, разработчики могут легко хранить или извлекать данные.

В следующей таблице перечислены некоторые из важных объекта пути сеанса:

С.Н. Метод и описание
1 GetAttribute общественного объекта (имя String)

Возвращаемый объект объект сеанса связанный с указанным именем, или нулевое значение, если их нет
2 Открытое перечисление getAttributeNames ()

Возвращает объект сеанса все имена объектов
3 публика долго getCreationTime ()

Возвращает объект сеанса создается время в миллисекундах, с 1 января 1970 года дата раннего утра
4 Строка GetId общественности ()

Возвращает объект сеанса ID
5 публика долго getLastAccessedTime ()

Возвращает последний раз, когда клиент побывал в миллисекундах с 1 января 1970 года дату раннего утра
6 общественное INT getMaxInactiveInterval ()

Возвращает максимальный интервал времени, в секундах, контейнер сервлетов будет держать сессию открытой в это время
7 общественного недействительными Invalidate ()

Сессия недействительности, разукрупнение любые объекты привязаны к сессии
8 общественного логический isNew (

Возвращает ли новый клиент, или если клиент отказался присоединиться к сеансу
9 общественного недействительными removeAttribute (имя String)

Удалить заданное имя объекта сеанса
10 общественного недействительными SetAttribute (имя String, Object значение)

Для получения объекта с указанным именем и значением и привязывается к сеансу
11 общественного недействительными setMaxInactiveInterval (INT интервал)

Чтобы указать время, в секундах, контейнер сервлетов будет держать сессию в силе в течение этого периода

Применение Session 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: // локального хоста: 8080 / testjsp / main.jsp, первый запуск будет получить следующие результаты:

Посетите еще раз, мы получим следующие результаты:


Удаление данных сессии

После завершения обработки данных сеанса пользователя, у вас есть следующие варианты:

  • Удалить определенное свойство:

    Вызов метода общественного недействительными removeAttribute (имя String), чтобы удалить указанное свойство.

  • Чтобы удалить весь разговор:

    Вызов метод общественного недействительными Invalidate (), чтобы сделать весь сеанс является недействительным.

  • Установка Длительность сеанса:

    Вызов метод общественного недействительными setMaxInactiveInterval (INT интервал), чтобы установить тайм-аут сеанса.

  • Вход пользователя:

    Servlet2.4 поддерживаются версии сервера, вы можете вызвать метод выхода из системы (), чтобы выйти из системы пользователя и все связанные с ним сеанс является недействительным.

  • Web.xml файл конфигурации:

    Если вы используете Tomcat, вы можете настроить файл web.xml к следующим функциям:

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

Тайм-аут в течение нескольких минут, Tomcat по умолчанию время ожидания составляет 30 минут.

Servlet в методе getMaxInactiveInterval () возвращает тайм-аут секунд. Если файл web.xml конфигурируется в течение 15 минут, а затем метод getMaxInactiveInterval () вернет 900.