Latest web development tutorials

JSP Session

HTTP è un protocollo stateless, il che significa che ogni volta che un client recupera pagine, deve aprire un server connessione separata, il server non registra il client precedente richiede alcuna informazione.

Ci sono tre modi per tenere le sessioni client e server:


biscotti

server di rete può assegnare un ID di sessione unica come un cookie per rappresentare ogni cliente per identificare la prossima richiesta del cliente.

Questo non può essere un modo efficace, perché un sacco di volte non supporta necessariamente il cookie del browser, quindi si consiglia di non utilizzare questo metodo per mantenere la sessione.


campi del modulo nascosti

Un server web può inviare un nascosti campi del modulo HTML e un ID di sessione univoco, come questo:

<input type="hidden" name="sessionid" value="12345">

Questa voce significa che quando il modulo viene inviato, il nome e il valore specificato verranno inclusi automaticamente nei dati GET o POST. Ogni volta che il browser invia una richiesta, il valore session_id può essere utilizzato per salvare diversa traiettoria browser.

Questo approccio può essere un modo efficace, ma non produrre un evento modulo di presentazione Fare clic <A HREF> scheda collegamento ipertestuale e quindi i campi del modulo nascosti non supportano il monitoraggio della sessione generico.


riscrittura degli URL

È possibile aggiungere alcuni dati aggiuntivi dietro ogni URL per distinguere la sessione, in base al server di dati può essere associato identificatore di sessione.

Ad esempio, http: //w3cschool.cc/file.htm; sessionid = 12345, sessione identificatore sessionid = 12345, il server può utilizzare questi dati per identificare il client.

Al contrario, la riscrittura degli URL è un modo migliore, anche se il browser non supporta i cookie può anche funzionare, ma lo svantaggio è che è necessario specificare un ID di sessione per ogni URL dinamico, anche se si tratta di una semplice pagina HTML.


oggetti di sessione

Oltre ai diversi metodi di cui sopra al di fuori, JSP interfaccia servlet HttpSession fornisce utilizzare per identificare un utente, per memorizzare tutti l'accesso dell'utente alle informazioni.

Per impostazione predefinita, JSP permette il tracciamento della sessione, un nuovo oggetto HttpSession verrà automaticamente per nuovo client istanziato. il monitoraggio della sessione Divieto ha bisogno di girare in modo esplicito fuori dalla direttiva di pagina sessione di valore di attributo su false per ottenere, come segue:

<%@ page session="false" %>

motore JSP oggetto sessione implicita è esposto allo sviluppatore. Fornendo un oggetto sessione, gli sviluppatori possono facilmente memorizzare o recuperare i dati.

La seguente tabella elenca alcuni dei importante oggetto modi sessione:

SN Metodo & descrizione
1 getAttribute oggetto pubblico (String name)

L'oggetto restituito oggetto sessione legato con il nome specificato, oppure null se non esiste
2 getAttributeNames Enumerazione pubblica ()

Restituisce l'oggetto di sessione tutti i nomi degli oggetti
3 lungo getCreationTime pubblico ()

Restituisce l'oggetto sessione viene creato il tempo, in millisecondi, dal 1 gennaio 1970 la data del primo mattino
4 public String getId ()

Restituisce l'ID oggetto di sessione
5 lungo getLastAccessedTime pubblico ()

Restituisce l'ultima volta che il cliente ha visitato, in millisecondi, dal 1 gennaio 1970 la data del primo mattino
6 public int getMaxInactiveInterval ()

Restituisce l'intervallo di tempo massimo, in secondi, servlet container manterrà aperta la seduta in questo momento
7 public void invalidate ()

L'invalidazione della sessione, unbundling qualsiasi oggetto legato alla sessione
8 public boolean isNew (

Restituisce se un nuovo cliente, o se il cliente ha rifiutato di partecipare alla sessione
9 removeAttribute public void (String name)

Rimuovere il nome dell'oggetto sessione specificata
10 setAttribute public void (nome String, Object value)

Per produrre un oggetto con il nome e il valore specificato e legato alla sessione
11 setMaxInactiveInterval public void (intervallo di int)

Per specificare il tempo, in secondi, servlet container manterrà la sessione valida durante questo periodo

JSP sessione dell'applicazione

Questo esempio descrive come utilizzare l'oggetto HttpSession per ottenere l'ora di creazione e ora di accesso. Ci sarà un nuovo oggetto di sessione per l'oggetto richiesta associata, se questo oggetto non esiste già.

<%@ 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>

Tenta di accedere a http: // localhost: 8080 / testjsp / main.jsp, prima esecuzione otterrà i seguenti risultati:

Visita di nuovo, avremo i seguenti risultati:


Elimina dati di sessione

Una volta terminato l'elaborazione di dati della sessione di un utente, sono disponibili le seguenti opzioni:

  • Rimuovere una proprietà specifica:

    Chiamare il metodo pubblico removeAttribute void (String name) per rimuovere la proprietà specificata.

  • Per eliminare un'intera conversazione:

    Chiamare il metodo public void invalidate () per rendere l'intera sessione non è valido.

  • Impostazione della sessione Durata:

    Chiamare il metodo public void setMaxInactiveInterval (intervallo di int) per impostare il timeout della sessione.

  • Iscriviti Utente:

    versioni Servlet2.4 supportate di server, è possibile chiamare il metodo di logout () per uscire l'utente e tutte le sessioni associate non sono validi.

  • file di configurazione web.xml:

    Se si utilizza Tomcat, è possibile configurare il file web.xml al seguente:

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

Time-out in pochi minuti, Tomcat timeout predefinito è di 30 minuti.

Servlet nel metodo getMaxInactiveInterval () restituisce i secondi di attesa. Se il web.xml è configurato per 15 minuti, quindi il metodo getMaxInactiveInterval () restituirà 900.