Scala e Sollevare e SessionVar che perde il suo contenuto
Domanda
Ho SessionVar come questo Alzata:
object MyObject {
object myVar extends SessionVar[Box[MyObject]](Empty)
}
Poi ho impostato il valore una volta per myVar:
MyObject.myVar(Full(value))
Il mio problema è che dopo qualche tempo (1-5 minuti) myVar perderà il suo valore, cioè, avrà di nuovo valore vuoto. Ciò non è dovuto inattività poiché sto cliccando le pagine costantemente. Il mio codice non è la creazione di valore a vuoto. Durante questo 1-5 minuti myVar funziona correttamente. I registri non contengono messaggi correlati.
Ho provato ad aggiungere il metodo di arresto per myVar, ma non è sempre chiamato.
override protected def onShutdown(session: CleanUpParam): Unit = {
Log.error("shutdown executed")
}
Sono in esecuzione di sollevamento in via molo di comando mvn jetty:run
. Sto usando 1,1-un'istantanea di sollevamento. Io non sto creando esplicitamente qualsiasi tipo di biscotto o di sessione.
Tutte le idee che cosa sta accadendo? Potrebbe essere che la sessione scade o invalida in qualche modo, ma perché e da chi?
Ho anche provato a disabilitare liftGC con (LiftRules.enableLiftGC = false
), ma che non influisce.
Soluzione
Immagino che il problema è che mentre si fa clic in giro, si sta creando per sbaglio una nuova sessione. Questo spiegherebbe perché non stai ricevendo l'evento di arresto di sessione: il vecchio sessione esiste ancora, ma non è più lo si utilizza. Vi suggerisco di stampare l'ID di sessione con ogni richiesta e vedere se cambia.
Si potrebbe perdere la sessione perché il cookie di sessione è in scadenza, o perché non si è URL-codifica alcuni collegamenti (vedi HttpServletResponse.encodeURL), o perché si sta navigando fuori percorso del contesto dell'applicazione.
Altri suggerimenti
Qual è la vostra sessione di scadenza impostato in LiftRules?