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.

È stato utile?

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?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top