Scala 和 Lift 以及丢失内容的 SessionVar

发布于 2024-08-17 19:24:34 字数 736 浏览 2 评论 0原文

我在 Lift 中有这样的 SessionVar:

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

然后我为 myVar 设置一次值:

 MyObject.myVar(Full(value))

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

我尝试向 myVar 添加 shutdown 方法,但它没有被调用。

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

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

有什么想法吗?会话可能会以某种方式过期或失效,但为什么以及由谁执行?

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

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.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

枫林﹌晚霞¤ 2024-08-24 19:24:34

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

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

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.

西瑶 2024-08-24 19:24:34

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

What's your session expiry time set in LiftRules?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文