Сеанс можна розглядати як об’єкт, пов’язаний з кожним користувачем з унікальним ідентифікатором сеансу, а дані користувача базуються на зареєстрованому обліковому записі. За один сеанс можна налаштувати різні форми даних. Ці дані, що стосуються кожного користувача сайту, корисні як для користувача, так і для власника веб-сайту. HTTP є протоколом без стану. Щоразу, коли користувач відвідує веб-сторінку, він відкриває окреме з’єднання з веб-сервером, і сервер не відстежує попередні запити клієнта.
Існує кілька підходів до підтримки сеансу між клієнтом і сервером:
Об’єкт сеансу — це найбільш часто використовуваний неявний об’єкт, реалізований для зберігання даних користувача, щоб зробити їх доступними на інших сторінках 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);
%>
Тепер давайте подивимося, як використовувати об’єкт 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, ми помітимо, що кількість відвідувань збільшується, оскільки сесія розпізнається.
Після відкриття та керування сеансом ми можемо виконати кілька операцій із сеансом:
Ercole Palmeri
У поліклініці Катанії проведено операцію офтальмопластики за допомогою комерційного переглядача Apple Vision Pro…
Розвиток дрібної моторики за допомогою розфарбовування готує дітей до більш складних навичок, таких як письмо. Розфарбувати…
Військово-морський сектор є справжньою глобальною економічною силою, яка просунулася до 150-мільярдного ринку...
Минулого понеділка Financial Times оголосила про угоду з OpenAI. FT ліцензує свою журналістику світового рівня…