代码之家  ›  专栏  ›  技术社区  ›  Juha Syrjälä

scala、lift和sessionvar丢失了它的内容

  •  1
  • Juha Syrjälä  · 技术社区  · 15 年前

    我在Lift中有这样的会话var:

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

    然后我为myvar设置一次值:

     MyObject.myVar(Full(value))
    

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

    我试图将shutdown方法添加到myvar,但没有调用它。

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

    我在码头上开电梯,途经 mvn jetty:run 命令。我正在使用1.1-电梯快照。我没有明确地创建任何类型的cookie或会话。

    知道发生了什么吗?可能是会话以某种方式过期或失效,但为什么会这样,由谁来做呢?

    我甚至试着用( LiftRules.enableLiftGC = false )但这并不影响。

    2 回复  |  直到 15 年前
        1
  •  2
  •   Willis Blackburn    15 年前

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

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

        2
  •  1
  •   Viktor Klang    15 年前

    你在举重规则中规定的有效期是多少?