2012-02-27 11 views
8

Come si chiama isNew() sull'oggetto di sessione, verificare se la sessione è nuova o è già in uso?In che modo isNew() indica se la sessione è nuova o è già in uso?

Ho letto che isNew() restituisce true se il client non ha ancora risposto con l'ID di sessione. Ma cosa significa? Si prega di spiegare

+0

A quale classe si riferisce la tua domanda? –

+0

@ Andrew Logvinov vedere la modifica –

+0

Leggilo per capire come funzionano le sessioni: http://stackoverflow.com/questions/3106452/how-do-servlets-work-stant-istance-session-variables-and-multithreading – BalusC

risposta

20

Ho letto che isNew() restituisce true se il client non ha ancora risposto con l'ID di sessione. Ma cosa significa?

Si consideri che il server sta attualmente elaborando una richiesta. Esistono due scenari relativi alla gestione della sessione.

  • Nel nuovo scenario di sessione, viene creata una nuova sessione per l'utente/client dal server. (Il client potrebbe non aver fornito alcun ID di sessione nella richiesta, o potrebbe aver fornito un id di sessione che il server ritiene non valido.) Il codice dell'applicazione del servlet decide che una sessione è necessaria (ad esempio perché ha alcune informazioni che vuole negozio lì), e tenta di recuperarlo con il flag "Crea se non presente". L'infrastruttura servlet si rende conto che non esiste una sessione corrente, ne crea una nuova con un nuovo ID di sessione e la salva nell'archivio delle sessioni. Al completamento della richiesta, l'ID di sessione viene restituito al client; per esempio. come cookie o come URL con ID di sessione allegato.

  • Nello scenario di sessione esistente, il client ha incluso un ID di sessione nella richiesta; per esempio. come cookie di sessione o come ID di sessione nell'URL della richiesta. L'infrastruttura servlet riconosce questo id, lo cerca nel suo archivio di sessione e (se necessario) ricrea l'oggetto contenente lo stato di sessione recuperato dall'archivio di sessione. Quando il codice dell'applicazione del servlet tenta di accedere alla sessione, ottiene questo oggetto HttpSession, non uno nuovo. Lo stato della sessione può quindi essere utilizzato e aggiornato dal servlet durante l'elaborazione della richiesta.

Nel primo scenario, chiamando isNew() sull'oggetto sessione tornerà true perché questa è una nuova sessione.

Nel secondo scenario, chiamando isNew() sull'oggetto di sessione restituirà false perché NON è una nuova sessione.

Come si chiama isNew() sull'oggetto di sessione, verificare se la sessione è nuova o è già in uso?

L'infrastruttura servlet sa quale dei due scenari si è verificato perché ha effettuato la creazione della sessione o la ricerca della sessione. L'implementazione più ovvia di isNew() consiste nell'inserire un campo private boolean nell'oggetto HttpSession e restituire il valore di tale campo come risultato di isNew(). Il campo verrebbe inizializzato dall'infrastruttura servlet in base a come ha ottenuto l'oggetto sessione.

+2

non ho capito una sola parte della tua risposta. Puoi per favore chiarire i punti. –

+3

Capisco perfettamente ogni parte della risposta, grazie per averlo scritto. – user1884155

Problemi correlati