1

我在 Lift 中有这样的 SessionVar:

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

然后我为 myVar 设置一次值:

 MyObject.myVar(Full(value))

我的问题是,经过一段时间(1-5 分钟) myVar 会失去它的价值,也就是说,它会再次具有价值 Empty。这不是由于不活动,因为我不断地点击页面。我的代码没有将值设置为空。在这 1-5 分钟内,myVar 将正常工作。日志不包含相关消息。

我试图将关闭方法添加到 myVar,但它没有被调用。

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

我正在通过mvn jetty:run命令在码头运行 Lift。我正在使用 Lift 的 1.1-SNAPSHOT。我没有明确创建任何类型的 cookie 或会话。

任何想法发生了什么?可能是会话以某种方式过期或失效,但为什么以及由谁?

我什至尝试使用 ( LiftRules.enableLiftGC = false) 禁用 liftGC ,但这并不影响。

4

2 回答 2

2

我想问题是在单击时,您不小心创建了一个新会话。这可以解释为什么您没有收到会话关闭事件:旧会话仍然存在,但您不再使用它。我建议你打印出每个请求的会话 ID,看看它是否改变。

您可能会丢失会话,因为会话 cookie 即将到期,或者因为您没有对某些链接进行 URL 编码(请参阅 HttpServletResponse.encodeURL),或者因为您在应用程序的上下文路径之外导航。

于 2010-01-13T20:54:17.950 回答
1

您在 LiftRules 中设置的会话到期时间是多少?

于 2010-01-13T14:43:49.087 回答