views:

229

answers:

2

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.

+1  A: 

What's your session expiry time set in LiftRules?

Viktor Klang
How do I find that out? I have not set it.
Juha Syrjälä
+2  A: 

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.

Willis Blackburn

related questions