Статті

JSP Session, усі методи неявного об’єкта Session

In un sito web, l’utente può effettuare diverse interazioni su diverse pagine del sito. Spesso è utile fare in modo che il sito personalizzi i dati in base a ciascun utente, in modo tale che l’utente possa avere un suo spazio personale, per le proprie attività specifiche in base ai propri interessi. Per far questo, JSP fornisce l’oggetto implicito di Sessione. In questo post vedremo metodi e concetti utili per creare e gestire una sessione usando JSP, e cioè JSP Session.

Що таке сесія

Сеанс можна розглядати як об’єкт, пов’язаний з кожним користувачем з унікальним ідентифікатором сеансу, а дані користувача базуються на зареєстрованому обліковому записі. За один сеанс можна налаштувати різні форми даних. Ці дані, що стосуються кожного користувача сайту, корисні як для користувача, так і для власника веб-сайту. HTTP є протоколом без стану. Щоразу, коли користувач відвідує веб-сторінку, він відкриває окреме з’єднання з веб-сервером, і сервер не відстежує попередні запити клієнта.

Існує кілька підходів до підтримки сеансу між клієнтом і сервером:

  • Печиво : файли cookie — це текстові файли, які дозволяють програмістам зберігати певну інформацію на клієнтському комп’ютері та зберігаються для відстеження використання.
  • Передача ідентифікатора сеансу в URL : Додавання та передача ідентифікатора сеансу до URL-адреси також є способом ідентифікації сеансу. Цей метод застарів і небезпечний, оскільки ви можете відстежувати URL-адресу.

Неявний об’єкт сеансу JSP

Об’єкт сеансу — це найбільш часто використовуваний неявний об’єкт, реалізований для зберігання даних користувача, щоб зробити їх доступними на інших сторінках JSP, доки сеанс користувача не буде активним.

Неявний об’єкт сеансу є екземпляром інтерфейсу javax.servlet.http.HttpSession .

Цей об’єкт сеансу має кілька методів сеансу для обробки даних у межах сеансу.

Ось приклад запиту JSP і неявних об’єктів сеансу, де користувач надсилає інформацію для входу, а інша сторінка JSP отримує її для обробки. Давайте почнемо зі сторінки HTML, яка ініціюватиме дію на сервері:

Інноваційний бюлетень
Не пропустіть найважливіші новини про інновації. Підпишіться, щоб отримувати їх електронною поштою.
<!DOCTYPE html>
<html>
    <head>
        <title>User login form</title>
    </head>
    <body>
        <form action="login.jsp">
            Username: <input type="text" name="user_name" /> <br />
            <input type="submit" value="Submit" />
        </form>
    </body>
</html>

Нижче наведено файл login.jsp, який активується дією HTML, яка перед переспрямуванням на home.jsp встановлює змінну сеансу user:name

<%@ page import = " java.util.* " %>
<% 
String username = request.getParameter("user_name"); 
if(username.equals("admin")){

    // session variable user_name
    session.setAttribute("user_name",username); 
    response.sendRedirect("home.jsp"); 
}else{
    out.print("Invalid Username");  
}
%>

Під файлом home.jsp, викликаним після встановлення змінної сеансу, файл читає вміст змінної сеансу за допомогою методу getAttribute

<%
String session_user_name = (String)session.getAttribute("user_name");
out.print("Hi " + session_user_name);
%>
Метод неявного об’єкта сеансу
  1. громадський об'єкт getAttribute (ім'я рядка) : Використовується для повернення об’єкта, пов’язаного з вказаною назвою для сеансу, і значення null, якщо об’єкт відсутній.
  2. публічний перелік getAttributeNames () : використовується для повернення переліку об’єктів String, який міститиме назви всіх об’єктів у цьому сеансі.
  3. публічний довго getCreationTime() : використовується для повернення часу створення сеансу з півночі 1 січня 1970 року за Гринвічем.
  4. publicString getId() : використовується для повернення рядка, який міститиме унікальний ідентифікатор, призначений сеансу.
  5. публічний довго getLastAccessedTime() : це використовується для повернення часу, коли ваш клієнт востаннє надсилав запит, приєднаний до сеансу.
  6. громадський міжн getMaxInactiveInterval() : використовується для повернення найбільшої кількості часу (у секундах), який зберігатиме контейнер сервлету, коли сеанс відкривається між входом клієнта.
  7. публічна порожнеча недійсний () : використовується для анулювання сеансу та розв’язування пов’язаних з ним об’єктів.
  8. загальнодоступне логічне значення isNew() : використовується для повернення істини, коли клієнт нічого не знає про сеанс або коли клієнт вирішує не приєднуватися до сеансу.
  9. публічна порожнеча removeAttribute(ім'я рядка) : використовується для видалення об’єкта, конкретно пов’язаного із сеансом.
  10. публічна порожнеча setAttribute(ім'я рядка, значення об'єкта) : використовується для пов’язування об’єкта з сеансом за допомогою вказаного імені.
  11. публічна порожнеча setMaxInactiveInterval(int інтервал) : використовується для визначення часу (у секундах) між запитами клієнта, протягом якого контейнер сервлету скасує цей сеанс.
Приклад відстеження сесії

Тепер давайте подивимося, як використовувати об’єкт 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("BlogInnovazione.it");

   // 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>

Розмістивши код jsp на сервері та запустивши jsp, ми отримаємо такий результат

Повторно активувавши код jsp, ми помітимо, що кількість відвідувань збільшується, оскільки сесія розпізнається.

Видалення даних сеансу

Після відкриття та керування сеансом ми можемо виконати кілька операцій із сеансом:

  • Видалити певний атрибут: ви можете викликати публічний метод void removeAttribute(String name), щоб видалити значення, пов’язане з певним ключем;
  • Видалити весь сеанс: ви можете викликати публічний метод void invalidate(), щоб видалити весь сеанс;
  • Налаштування часу очікування сеансу: публічний метод void setMaxInactiveInterval(int interval) можна викликати, щоб встановити тайм-аут для окремого сеансу;
  • Вийти з системи користувача: Ви можете викликати вихід із системи, щоб відключити клієнт від веб-сервера та зробити недійсними всі сеанси, що належать усім користувачам.

Ercole Palmeri

Інноваційний бюлетень
Не пропустіть найважливіші новини про інновації. Підпишіться, щоб отримувати їх електронною поштою.

Останні статті

Інноваційне втручання в доповнену реальність із програмою перегляду Apple у поліклініці Катанії

У поліклініці Катанії проведено операцію офтальмопластики за допомогою комерційного переглядача Apple Vision Pro…

3 травня 2024

Переваги розмальовок для дітей - чарівний світ для будь-якого віку

Розвиток дрібної моторики за допомогою розфарбовування готує дітей до більш складних навичок, таких як письмо. Розфарбувати…

2 травня 2024

Майбутнє тут: як індустрія судноплавства революціонізує світову економіку

Військово-морський сектор є справжньою глобальною економічною силою, яка просунулася до 150-мільярдного ринку...

1 травня 2024

Видавці та OpenAI підписують угоди щодо регулювання потоку інформації, яка обробляється штучним інтелектом

Минулого понеділка Financial Times оголосила про угоду з OpenAI. FT ліцензує свою журналістику світового рівня…

Квітень 30 2024

Читайте Innovation своєю мовою

Інноваційний бюлетень
Не пропустіть найважливіші новини про інновації. Підпишіться, щоб отримувати їх електронною поштою.

Слідуйте за нами