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 |
---|---|
1 | Objet public getAttribute(String name) |
. 2 | Énumération publique getAttributeNames() |
3 | public long getCreationTime() |
4 | chaîne publique getId() |
5 | public long getLastAccessedTime() |
6 | public int getMaxInactiveInterval() |
7 | public void invalidate() |
8 | booléen public isNew( |
9 | public void removeAttribute(String name) |
10 | public void setAttribute(Nom de la chaîne, valeur de l'objet) |
11 | public void setMaxInactiveInterval(int interval) |
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 :
Lors de votre prochaine visite, vous obtiendrez les résultats suivants :
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.