English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
HTTP est un protocole sans état, ce qui signifie que chaque fois que le client récupère une page Web, une connexion de serveur distincte doit être ouverte, donc le serveur ne enregistre aucune information sur les demandes précédentes du client.
Il y a trois méthodes pour maintenir la session entre le client et le serveur :
Le serveur réseau peut spécifier un ID de session unique en tant que cookie pour représenter chaque client, utilisé pour identifier la demande suivante du client.
Cela peut ne pas être une méthode efficace, car dans de nombreux cas, le navigateur ne prend pas nécessairement en charge les cookies, nous ne recommandons donc pas d'utiliser cette méthode pour maintenir la session.
Un serveur réseau peut envoyer un champ de formulaire HTML caché et un ID de session unique, comme suit :
<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 suivre les trajectoires de différents navigateurs.
Cette méthode peut être un moyen efficace, mais lors du clic sur un lien dans un balise <A HREF>, il ne génère pas d'événement de soumission de formulaire, par conséquent, le masquage des champs de formulaire ne prend pas en charge le suivi de session universel.
Vous pouvez ajouter des données supplémentaires à la fin de chaque URL pour distinguer les sessions, et le serveur peut utiliser ces données pour associer l'identifiant de session.
Par exemple, http://oldtoolbag.com/file.htm;sessionid=12345, l'identifiant de session est sessionid=12345, le serveur peut utiliser ces données pour identifier le client.
Par comparaison, la réécriture de l'URL est une meilleure méthode, même si le navigateur ne prend pas en charge les cookies, elle fonctionne toujours, mais le inconvénient est que vous devez spécifier dynamiquement l'ID de session pour chaque URL, même si c'est une page HTML simple.
En plus des méthodes mentionnées précédemment, JSP utilise l'interface HttpSession fournie par le servlet pour identifier un utilisateur, et stocker toutes les informations d'accès de cet utilisateur.
Par défaut, JSP autorise le suivi de session. Un nouveau objet HttpSession sera automatiquement instancié pour chaque exemple de client. Pour interdire le suivi de session, il est nécessaire de le désactiver explicitement, en définissant la valeur de l'attribut session de l'instruction page sur false, comme suit :
<%@ page session="false" %>
Le moteur JSP expose implicitement l'objet session aux développeurs. Grâce à l'objet session fourni, les développeurs peuvent stocker ou rechercher des données de manière plus pratique.
Le tableau suivant liste certaines méthodes importantes de l'objet session :
S.N. | Méthode & Description |
---|---|
1 | public Object getAttribute(String name) Renvoie l'objet lié au nom spécifié dans l'objet session, si il n'existe pas, renvoie null |
2 | public Enumeration getAttributeNames() Renvoie tous les noms d'objet de l'objet session |
3 | public long getCreationTime() Retourner le temps de création de l'objet session, en millisecondes, à partir de1970 ans1mois1Heure zéro du matin |
4 | public String getId() Retourner l'ID de l'objet session |
5 | public long getLastAccessedTime() Retourner le temps d'accès du client dernier, en millisecondes, à partir de1970 ans1mois1Heure zéro du matin |
6 | public int getMaxInactiveInterval() Retourner l'intervalle maximum en secondes, pendant lequel le conteneur servlet gardera la session ouverte |
7 | public void invalidate() Invalider la session, délier tous les objets liés à cette session |
8 | public boolean isNew() Retourner si c'est un nouveau client ou si le client refuse de rejoindre la session |
9 | public void removeAttribute(String name) Supprimer l'objet de la session avec le nom spécifié |
10 | public void setAttribute(String name, Object value) Créer un objet avec le nom et la valeur spécifiés et le lier à la session |
11 | public void setMaxInactiveInterval(int interval) Utilisé pour spécifier le temps, en secondes, pendant lequel le conteneur servlet gardera la session active |
Cette instance décrit comment utiliser l'objet HttpSession pour obtenir le temps de création et le dernier temps d'accès. Nous allons associer une nouvelle session à l'objet request, si elle n'existe pas déjà.
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8%> <%@ page import="java.io.*,java.util.*%> <% // Obtenir le temps de création de la session Date createTime = new Date(session.getCreationTime()); // Obtenir le temps d'accès à la dernière page visitée Date lastAccessTime = new Date(session.getLastAccessedTime()); String title = "Visite à nouveau le site Web de base"; Integer visitCount = new Integer(0); String visitCountKey = new String("visitCount"); String userIDKey = new String("userID"); String userID = new String("ABCD"); // Vérifier si une nouvelle visite utilisateur existe sur la page web if (session.isNew()){ title = "Exemple de site Web de base"; 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>Suivi de session</title> </head> <body> <h1>Suivi de session</h1> <table border="1" align="center"> <tr bgcolor="#949494"> <th>Informations de session</th> <th>Valeur</th> </tr> <tr> <td>id</td> <td><% out.print(session.getId()); %></td> </tr> <tr> <td>Heure de création</td> <td><% out.print(createTime); %></td> </tr> <tr> <td>Dernière heure d'accès</td> <td><% out.print(lastAccessTime); %></td> </tr> <tr> <td>ID utilisateur</td> <td><% out.print(userID); %></td> </tr> <tr> <td>Nombre de visites</td> <td><% out.print(visitCount); %></td> </tr> </table> </body> </html>
Essayons d'accéder http://localhost:8080/testjsp/main.jsp ,le résultat suivant sera obtenu lors du premier lancement :
Lors d'une nouvelle visite, vous obtiendrez le résultat suivant :
Après avoir traité les données de session d'un utilisateur, vous pouvez avoir les choix suivants :
Supprimer un attribut spécifique :
Appeler la méthode public void removeAttribute(String name) pour supprimer l'attribut spécifié.
Supprimer toute la session :
Appeler la méthode public void invalidate() pour rendre la session entière invalide.
Configurer la durée de vie de la session :
Appeler la méthode public void setMaxInactiveInterval(int interval) pour configurer le temps d'expiration de la session.
Se déconnecter de l'utilisateur :
Supporte servlet2.4Les versions de serveurs, peuvent appeler la méthode logout() pour se déconnecter de l'utilisateur et rendre toutes les sessions associées invalides.
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>
L'expiration est en minutes, le temps d'expiration par défaut dans Tomcat est30 minutes.
La méthode getMaxInactiveInterval() dans Servlet retourne le temps d'expiration en secondes. Si dans web.xml il est configuré comme suit15Si minutes sont écoulées, la méthode getMaxInactiveInterval() retournera900。