Question

I have SessionVar like this in Lift:

object MyObject {
   object myVar extends SessionVar[Box[MyObject]](Empty)
}

Then I set value once for myVar:

 MyObject.myVar(Full(value))

My problem is that after some time (1-5 mins) myVar will lose its value, that is, it will have value Empty again. This is not due inactivity since I am clicking pages constantly. My code is not setting value to Empty. During this 1-5 mins the myVar will work correctly. The logs contain no related messages.

I tried to add shutdown method to myVar, but it is not getting called.

 override protected def onShutdown(session: CleanUpParam): Unit = {
   Log.error("shutdown executed")
 }

I am running Lift in jetty via mvn jetty:run command. I am using 1.1-SNAPSHOT of Lift. I am not creating explicitly any kind of cookie or session.

Any ideas what is happening? It could be that session expires or invalidates somehow, but why and by whom?

I even tried to disable liftGC with (LiftRules.enableLiftGC = false) but that does not affect.

Was it helpful?

Solution

I imagine that the issue is that while clicking around, you are accidentally creating a new session. That would explain why you're not getting the session shutdown event: the old session still exists, but you're no longer using it. I suggest that you print out the session ID with each request and see if it changes.

You might be losing the session because the session cookie is expiring, or because you aren't URL-encoding some links (see HttpServletResponse.encodeURL), or because you are navigating outside your application's context path.

OTHER TIPS

What's your session expiry time set in LiftRules?

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top