Séance JSP


HTTP est un protocole sans état, ce qui signifie que chaque fois que le client récupère une page Web, une connexion serveur distincte est ouverte, de sorte que le serveur n'enregistre aucune information des requêtes précédentes du client.

Il existe trois manières de maintenir la session entre le client et le serveur :


Cookies

Le serveur Web peut attribuer un identifiant de session unique en tant que cookie pour représenter chaque client et l'utiliser pour identifier les demandes ultérieures de ce client.

Ce n'est peut-être pas un moyen efficace, car souvent les navigateurs ne prennent pas nécessairement en charge les cookies, nous ne recommandons donc pas d'utiliser cette méthode pour maintenir la session.


Champs de formulaire masqués

Un serveur Web peut envoyer un champ de formulaire HTML masqué et un identifiant 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 sera 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 enregistrer les traces des différents navigateurs.

Cette approche peut être efficace, mais cliquer sur un lien hypertexte dans une balise <A HREF> ne génère pas d'événement de soumission de formulaire, donc les champs de formulaire masqués ne prennent pas en charge le suivi de session universel.


Réécriture des URL

Vous pouvez ajouter des données supplémentaires après chaque URL pour distinguer la session, et le serveur peut associer l'identifiant de session en fonction de ces données.

Par exemple, http://w3cschool.cc/file.htm;sessionid=12345, l'identifiant de session est sessionid=12345, le serveur peut utiliser ces données pour identifier le client.

En comparaison, réécrire l'URL est une meilleure façon. Cela peut fonctionner 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 s'il s'agit d'une URL. une simple page HTML.


objet session

En plus des méthodes ci-dessus, 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, et un nouvel objet HttpSession sera automatiquement instancié pour les nouveaux clients. La désactivation du suivi de session nécessite de le désactiver explicitement, ce qui est réalisé en définissant la valeur de l'attribut de session dans la directive page sur false, comme suit :

<%@ page session="false" %>

Le moteur JSP expose l'objet de session implicite aux développeurs. Puisque l'objet session est 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
1Objet public getAttribute(String name)


Renvoie l'objet lié au nom spécifié dans l'objet de session. S'il n'existe pas, renvoie null
. 2Énumération publique getAttributeNames()


Renvoie tous les noms d'objet dans l'objet de session
3public long getCreationTime()


Renvoie l'heure à laquelle l'objet session a été créé, en millisecondes, à partir du petit matin du 1er janvier 1970
4chaîne publique getId()


Renvoie l'ID de l'objet de session
5public long getLastAccessedTime()


Renvoie l'heure du dernier accès du client, en millisecondes, à partir du petit matin du 1er janvier 1970
6public int getMaxInactiveInterval()


Renvoie l'intervalle de temps maximum, en secondes, pendant lequel le conteneur de servlet gardera la session ouverte
7public void invalidate()


Invalidez la session et dissociez tous les objets liés à la session
8booléen public isNew(


Indique s'il s'agit d'un nouveau client ou si le client refuse de rejoindre la session
9public void removeAttribute(String name)


Supprimez l'objet portant le nom spécifié dans la session
10public void setAttribute(Nom de la chaîne, valeur de l'objet)


Utilisez le nom et la valeur spécifiés pour générer un objet et le lier à la session
11public void setMaxInactiveInterval(int interval)


Utilisé pour spécifier le temps, en secondes, pendant lequel le conteneur de servlet maintiendra la session valide

Application de session 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 session à l'objet 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 = "再次访问php中文网实例";
   Integer visitCount = new Integer(0);
   String visitCountKey = new String("visitCount");
   String userIDKey = new String("userID");
   String userID = new String("ABCD");

   // 检测网页是否由新的访问用户
   if (session.isNew()){
      title = "访问php中文网实例";
      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 d'accéder à http://localhost:8080/testjsp/main.jsp, et vous obtiendrez les résultats suivants lorsque vous l'exécuterez pour la première fois :

sessjsp1.jpg

Lors de votre prochaine visite, vous obtiendrez les résultats suivants :

sessjsp2.jpg


Supprimer les données de session

Lorsque les données de session d'un utilisateur sont traitées Enfin, vous pouvez avoir les choix suivants :

  • Supprimez un attribut spécifique :

    Appelez la méthode public void removeAttribute(String name) pour supprimer l'attribut spécifié.

  • Supprimez toute la session :

    Appelez la méthode public void invalidate() pour invalider toute la session.

  • Définissez la période de validité de la session :

    Appelez la méthode public void setMaxInactiveInterval(int interval) pour définir le délai d'expiration de la session.

  • Déconnexion de l'utilisateur :

    Pour les serveurs prenant en charge la version servlet2.4, vous pouvez appeler la méthode logout() pour déconnecter l'utilisateur et invalider toutes les sessions associées.

  • Configurez 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'attente est écoulé minutes, 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'attente en secondes. Si 15 minutes sont configurées dans web.xml, la méthode getMaxInactiveInterval() renverra 900.