Session JSP Session
HTTP est un protocole sans état, ce qui signifie que chaque fois qu'un client récupère une page Web, une connexion serveur distincte est ouverte, de sorte que le serveur n'enregistre aucune information provenant des requêtes précédentes du client.
Il existe trois façons de maintenir une session entre le client et le serveur :
Cookies
Le serveur Web peut attribuer un ID de session unique sous forme de cookie pour représenter chaque client, et l'utiliser pour identifier les requêtes ultérieures de ce client.
Cela peut ne pas être une méthode efficace, car dans de nombreux cas, les navigateurs ne prennent pas nécessairement en charge les cookies, donc nous ne recommandons pas d'utiliser cette méthode pour maintenir les sessions.
Champs de formulaire masqués
Un serveur Web peut envoyer un champ de formulaire HTML masqué avec un ID de session unique, comme ceci :
<input type="hidden" name="sessionid" value="12345">
Cette entrée signifie que lorsque le formulaire est soumis, le nom et la valeur spécifiés seront automatiquement inclus dans les données GET ou POST. Chaque fois que le navigateur envoie une requête, la valeur de session_id peut être utilisée pour garder une trace des différents navigateurs.
Cette méthode peut être efficace, mais cliquer sur des liens hypertexte dans les balises <A HREF> ne génère pas d'événements de soumission de formulaire, donc les champs de formulaire masqués ne prennent pas non plus en charge le suivi général des sessions.
Réécriture d'URL
Vous pouvez ajouter des données supplémentaires après chaque URL pour différencier les sessions, et le serveur peut associer des identifiants de session en fonction de ces données.
Par exemple, http://w3cschool.cc/file.htm;sessionid=12345, l'identifiant de session est sessionid=12345, et le serveur peut utiliser ces données pour identifier le client.
En revanche, la réécriture d'URL est une meilleure solution car elle fonctionne même si le navigateur ne prend pas en charge les cookies, mais l'inconvénient est que vous devez spécifier dynamiquement l'ID de session pour chaque URL, même pour une simple page HTML.
objet session
En plus des méthodes ci-dessus, JSP utilise l'interface HttpSession fournie par les servlets pour identifier un utilisateur et stocker toutes les informations d'accès pour cet utilisateur.
Par défaut, JSP active le suivi de session, et un nouvel objet HttpSession sera automatiquement instancié pour les nouveaux clients. Pour désactiver le suivi de session, vous devez le désactiver explicitement en définissant l'attribut session de la directive page sur false, comme suit :
<%@ page session="false" %>
Le moteur JSP expose l'objet session implicite aux développeurs. Avec l'objet session fourni, les développeurs peuvent facilement stocker ou récupérer des données.
Le tableau suivant répertorie quelques méthodes importantes de l'objet session :
| S.N. | Méthode & Description |
|---|---|
| 1 | public Object getAttribute(String name) |
Application JSP
Cet exemple décrit comment utiliser l'objet HttpSession pour obtenir l'heure de création et l'heure du dernier accès. Nous associerons un nouvel objet de session à l'objet de requête s'il n'existe pas déjà.
<%@ 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 = "再次访问Example实例";
Integer visitCount = new Integer(0);
String visitCountKey = new String("visitCount");
String userIDKey = new String("userID");
String userID = new String("ABCD");
// 检测网页是否有新的访问用户
if (session.isNew()){
title = "访问Example实例";
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>
Essayez de visiterhttp://localhost:8080/testjsp/main.jsp, la première exécution produira le résultat suivant :
Une nouvelle visite produira le résultat suivant :
Suppression des données de session
Après avoir traité les données de session d'un utilisateur, vous disposez des options suivantes :
- Supprimer un attribut spécifique :
Appelez la méthode public void removeAttribute(String name) pour supprimer l'attribut spécifié.
- Supprimer toute la session :
Appelez la méthode public void invalidate() pour invalider toute la session.
- Définir le délai d'expiration de la session :
Appelez la méthode public void setMaxInactiveInterval(int interval) pour définir le délai d'expiration de la session.
- Déconnecter l'utilisateur :
Pour les serveurs prenant en charge Servlet 2.4, vous pouvez appeler la méthode logout() pour déconnecter l'utilisateur et invalider toutes les sessions associées.
- Configurer le fichier web.xml :
Si vous utilisez Tomcat, vous pouvez configurer le fichier web.xml comme suit :
<session-config>
<session-timeout>15</session-timeout>
</session-config>
Le délai d'expiration est en minutes, et le délai d'expiration par défaut dans Tomcat est de 30 minutes.
La méthode getMaxInactiveInterval() dans Servlet renvoie le délai d'expiration en secondes. Si 15 minutes sont configurées dans web.xml, la méthode getMaxInactiveInterval() renverra 900.
Autres extensions