Latest web development tutorials

JSP session

HTTP est un protocole sans état, ce qui signifie que chaque fois qu'un client récupère les pages, doit ouvrir un serveur de connexion séparée, le serveur ne comptabilise pas le client précédente demande aucune information.

Il y a trois façons de garder les sessions client et serveur:


cookies

serveur de réseau peut attribuer un ID de session unique comme un cookie pour représenter chaque client pour identifier la prochaine demande du client.

Cela peut ne pas être un moyen efficace, parce que beaucoup de fois ne prend pas nécessairement le cookie de navigateur, donc nous ne recommandons pas d'utiliser cette méthode pour maintenir session.


champs de formulaire cachés

Un serveur Web peut envoyer un cachés champs de formulaire HTML et 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ée seront automatiquement inclus dans les données de GET ou POST. Chaque fois que le navigateur envoie une requête, la valeur session_id peut être utilisé pour enregistrer différents navigateur trajectoire.

Cette approche peut être un moyen efficace, mais ne produit pas un événement formulaire de soumission Cliquez <A HREF> onglet lien hypertexte, et les champs de formulaire cachés donc ne prend pas en charge le suivi de session générique.


URL rewriting

Vous pouvez ajouter des données supplémentaires derrière chaque URL pour distinguer la session, selon le serveur de données peut être associé identifiant de session.

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

En revanche, la réécriture d'URL est une meilleure façon, même si le navigateur ne supporte pas les cookies peut également fonctionner, mais l'inconvénient est que vous devez spécifier un ID de session pour chaque URL dynamique, même si elle est une simple page HTML.


objets de session

En plus des différentes méthodes ci-dessus à l'extérieur, JSP Interface servlet HttpSession fournit utiliser pour identifier un utilisateur, pour stocker l'accès tout de l'utilisateur à l'information.

Par défaut, JSP permet le suivi de la session, un nouvel objet HttpSession automatiquement pour le nouveau client instancié. suivi de session d'interdiction doit tourner explicitement hors de la session valeur d'attribut de directive de page à false pour atteindre, comme suit:

<%@ page session="false" %>

moteur JSP objet de session implicite est exposée au développeur. En fournissant un objet de session, les développeurs peuvent facilement stocker ou récupérer des données.

Le tableau ci-dessous énumère quelques-uns de l'objet des moyens de session importante:

SN Méthode & Description
1 getAttribute public Object (String name)

L'objet retourné de la session d'objet lié avec le nom spécifié, ou null si aucun existe
2 getAttributeNames public Enumeration ()

Renvoie l'objet de session tous les noms d'objets
3 longue getCreationTime publique ()

Renvoie l'objet de session est créé le temps, en millisecondes, à partir du 1er Janvier 1970, la date de début de matinée
4 public String getId ()

Renvoie l'ID d'objet de la session
5 longue getLastAccessedTime publique ()

Retourne la dernière fois que le client a visité, en millisecondes, à partir du 1er Janvier 1970, la date de début de matinée
6 public int getMaxInactiveInterval ()

Renvoie l'intervalle de temps maximal, en secondes, conteneur de servlet gardera la session ouverte à ce moment
7 public void invalidate ()

L'invalidation de la session, le dégroupage des objets liés à la session
8 public boolean isNew (

Retourne si un nouveau client, ou si le client a refusé de se joindre à la session
9 removeAttribute public void (String name)

Supprimer la session nom d'objet spécifié
10 setAttribute public void (nom String, Object valeur)

Pour produire un objet avec le nom et la valeur spécifiée et lié à la session
11 setMaxInactiveInterval public void (int intervalle)

Pour spécifier le temps, en secondes, conteneur de servlet gardera la session valide pendant cette période

JSP session d'application

Cet exemple décrit comment utiliser l'objet HttpSession pour obtenir le temps de création et la dernière fois de l'accès. Nous serons un nouvel objet de session pour l'objet de requête associée, si cet objet 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 = "再次访问本教程实例";
   Integer visitCount = new Integer(0);
   String visitCountKey = new String("visitCount");
   String userIDKey = new String("userID");
   String userID = new String("ABCD");

   // 检测网页是否由新的访问用户
   if (session.isNew()){
      title = "访问本教程实例";
      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, première manche va obtenir les résultats suivants:

Visitez à nouveau, nous allons obtenir les résultats suivants:


Supprimer les données Session

Lors du traitement des données de session d'un utilisateur terminé, vous disposez des options suivantes:

  • Supprimer une propriété spécifique:

    Appel méthode removeAttribute public void (String name) pour supprimer la propriété spécifiée.

  • Pour supprimer une conversation entière:

    Appel méthode public void invalidate () pour faire toute la session est invalide.

  • Réglage Session Durée:

    Appel méthode public void setMaxInactiveInterval (intervalle de int) pour définir le délai d'expiration de session.

  • Inscrivez - utilisateur:

    versions Servlet2.4 pris en charge du serveur, vous pouvez appeler la méthode logout () pour déconnecter l'utilisateur et toute session associée est invalide.

  • fichier de configuration Web.xml:

    Si vous utilisez Tomcat, vous pouvez configurer le fichier web.xml à ce qui suit:

  <session-config>
    <session-timeout>15</session-timeout>
  </session-config>

Time-out en quelques minutes, Tomcat délai par défaut est de 30 minutes.

Servlet dans la méthode getMaxInactiveInterval () renvoie les secondes de délai. Si le web.xml est configuré pour 15 minutes, puis la méthode getMaxInactiveInterval () retournera 900.