2009-04-20 8 views
5

Sto eseguendo un'applicazione web J2EE in Tomcat e recentemente mi è stato assegnato il compito di aggiungere metriche all'applicazione. Sto usando un SessionListener per rilevare quando la sessione viene distrutta e quindi caricare le metriche in un database. Il timeout di My Session è impostato nel mio web.xml a 30 minuti e non invalido la sessione in nessun punto del programma. Spesso durante il periodo di 1 5-10 minuti di accesso per test, vedrò 3 o 4 serie di metriche caricate nel database, tutte con ID di sessione diversi.Random Session Invalidation

Oltre a web.xml e session.invalidate(), cos'altro può causare la distruzione di una sessione in Tomcat? Eccezioni? Tomcat invaliderà mai a caso le sessioni?

+0

Usi sessioni persistenti? – trunkc

+0

Non sto usando sessioni persistenti. – jconlin

+0

La registrazione dovrebbe creare solo una sessione, hai menzionato la creazione di 3 o 4. Mantieni le metriche solo quando la sessione viene distrutta o anche quando viene creata? –

risposta

4

Probabilmente il tuo browser ha deciso di non inviare il cookie di sessione su una richiesta all'applicazione web, dove l'applicazione si sarebbe aspettata. Ho visto questo accadere con una regola di riscrittura di apache; un URL al di fuori del percorso del cookie di sessione è stato reindirizzato all'applicazione Web. C'è qualcosa di simile alle folowing accaduti (dettagli può essere sbagliato):

  • mia applicazione web è stato localizzato a/app/
  • in tal modo il cookie di sessione era legato a questo percorso/app/
  • una pagina nel webapplication cui /img/magic.jpeg
  • il browser non ha inviato il cookie di sessione nella sua richiesta di questa immagine (percorso non corrisponde)
  • server reindirizzato la richiesta (internamente) a/app/createImage? magic
  • il web applicazione non ha ricevuto un cookie di sessione, quindi è creata una nuova sessione

Si dovrebbe essere in grado di vedere se questo fa sì che il vostro problema se si accede l'URL iniziale per le nuove sessioni.

0

Questo probabilmente non è ciò che sta accadendo sul server, ma se l'ora del sistema è impostata sul server, questo può far scadere le sessioni più velocemente di un "tempo trascorso" di 30 minuti. Tomcat, almeno a partire da 5.5, ha utilizzato "l'ora legale" per terminare le sessioni, pertanto la modifica dell'orologio di sistema influirà sulla durata della sessione.