2010-06-18 24 views
13

Ho anche affrontato questa domanda nella mia intervista. Ho molta confusione con Session Scope & it management in java.Che cos'è la gestione delle sessioni in Java?

in web.xml noi abbiamo la voce:

<session-config> 
     <session-timeout> 
      30 
     </session-timeout> 
</session-config> 

Cosa vuol indica in realtà? È l'ambito dell'intero progetto?

Un altro punto che mi confonde è come possiamo separare l'ambito di sessione di più richieste nello stesso progetto? Significa che se effettuo l'accesso da un PC & allo stesso tempo, effettuo l'accesso da un altro PC, lo differenzia?

Inoltre, un'altra cosa che confonde è la differenza del browser. Perché i diversi Gmail possono essere aperti in diversi browser? E Gmail può impedire una sessione dal Login alla disconnessione. Come viene gestito con la nostra web personale?

risposta

25

Gestione della sessione non è qualcosa di limitato a Java e servlet. Ecco più o meno come succede:

  1. Il protocollo HTTP è senza stato, in modo che il server e il browser dovrebbe avere un modo di immagazzinare l'identità dell'utente attraverso molteplici richieste
  2. Il browser invia la prima richiesta al server
  3. Il server controlla se il browser ha identificato il cookie di sessione (vedere di seguito)

    3.1. Se il server non lo fa 'sapere' del cliente:

    • il server crea un nuovo identificatore univoco, e lo mette in una mappa (o meno), come chiave, il cui valore è la sessione appena creata. Invia anche una risposta cookie contenente l'identificativo univoco.

    • il browser memorizza il cookie di sessione (con durata = la durata dell'istanza del browser), contenente l'identificatore univoco e lo utilizza per ciascuna richiesta successiva per identificarsi in modo univoco.

    3.2. se il server sa già il client - server ottiene la sessione corrispondente identificatore univoco passata trovato nel cookie di sessione

Ora su qualche domande che avete:

  • il timeout di sessione è il tempo di vivere per ogni voce della mappa di sessione senza essere accessibili. In altre parole, se un client non invia una richiesta per 30 minuti (dal tuo esempio), la mappa di sessione lascerà cadere questa voce, e anche se il client si identifica con la chiave univoca nel cookie di sessione, non saranno presenti dati sul server.

  • diversi gmail (e qualsiasi sito) possono essere aperti in diversi browser perché il cookie di sessione è per browser. Cioè ciascun browser si identifica in modo univoco non inviando l'id di sessione univoco o inviandone uno generato dal server.

  • accedendo da diversi PC è lo stesso in realtà - non si condivide un ID di sessione

  • logging-out è in realtà la rimozione la voce per l'ID di sessione sul server.

Nota: l'unico id di sessione può alternativamente essere conservato:

0

I servlet in Java dispongono di un oggetto HttpSession che è possibile utilizzare per memorizzare le informazioni di stato per un utente. La sessione viene gestita sul client da un cookie (JSESSIONID) o può essere eseguita utilizzando riscritture URL. Il timeout della sessione descrive per quanto tempo il server attenderà dopo l'ultima richiesta prima di eliminare le informazioni di stato memorizzate in una HttpSession.

L'ambito è per ogni istanza del browser, quindi nell'esempio in cui si esegue il login da due PC diversi si otterranno due oggetti di sessione.

2

Cosa indica in realtà?

La durata di una sessione. La sessione scade se non ci sono transazioni tra il client e il server per 30 minuti (per il segmento di codice)

È lo scopo dell'intero progetto?

Ha ambito di applicazione. Definite per ogni applicazione web

Un altro punto mi confonde è come si può abbiamo separare l'ambito sessione richiesta multipla nello stesso progetto? Significa se sto effettuando l'accesso da un PC & allo stesso tempo sto effettuando l'accesso da a un altro PC, lo differenzia?

Sì. Gli ID di sessione (JSESSIONID per Apache Tomcat) saranno diversi.

Inoltre, un'altra cosa di confusione è la differenza del browser . Perché è possibile aprire i diversi Gmail di nei diversi browser ?

Ogni accesso da parte dello stesso utente da un browser diverso è una sessione diversa del tutto. E i cookie impostati in un browser non influenzeranno in un altro. Sono quindi possibili diverse istanze di Gmail in diversi browser.

E Gmail può impedire una sessione da Accedi alla disconnessione. Come viene gestito lo con la nostra web personale?

Persistent cookies

0

se si apre la stessa applicazione in finestre diverse intendo più istanze di un browser i t creerà diverse sessioni per ogni istanza.

0

I recommand Apache Shiro per gestione sessione, Autenticazione e autorizzazione.

Io riprendo.

Come @BalusC commutato in seguito, solo il contenitore servlet si occupa della gestione della sessione http. Shiro lo sta usando. Si collegherà a HttpSession tramite un filtro che definisci esplicitamente.

+0

Shiro non ha nulla a che fare con la gestione della sessione HTTP. Ha qualcosa a che fare con l'autenticazione e l'autorizzazione che, in caso di applicazioni web "sotto le copertine", utilizzano effettivamente tra l'altro la sessione HTTP. Ma sicuramente ** non si assume la responsabilità di "gestione delle sessioni". Il servlettaintainer è il responsabile di ciò. Shiro si sta solo servendo di esso. – BalusC

0

abbiamo 4 modi per gestire una sessione.

1.Cookies 2.URL riscrittura 3.Hidden campi del modulo sessione 4.HTTP

il quarto è potente e in gran parte utilizzato ora a un giorno.

Problemi correlati