それ中身を失いスカラ座やリフトとSessionVar
質問
私はリフトでこのようSessionVarがあります:
object MyObject {
object myVar extends SessionVar[Box[MyObject]](Empty)
}
それから私は、myVarにするために一度値を設定します:
MyObject.myVar(Full(value))
私の問題は、それが再び空の値を持つことになり、つまり、いくつかの時間後(1-5分)myVarにはその価値を失うことになるということです。私は常にページをクリックしていますので、これは非アクティブではありません。私のコードは、空のために値を設定されていません。この1-5分の間、myVarには正しく動作します。ログには何の関連するメッセージが含まれていません。
私はmyVarをにshutdownメソッドを追加しようとしましたが、それは呼び出さ取得されていません。
override protected def onShutdown(session: CleanUpParam): Unit = {
Log.error("shutdown executed")
}
私はmvn jetty:run
コマンドで桟橋でのリフトを実行しています。私はリフトの1.1-SNAPSHOTを使用しています。私は明示的にクッキーやセッションのいずれかの種類を作成しておりません。
何が起こっているか任意のアイデア?これは、そのセッションが期限切れになるか、何らかの形で無効化しますが、なぜ、誰によってだろうか。
私も(LiftRules.enableLiftGC = false
)とliftGCを無効にしようとしたが、それは影響を与えません。
解決
私は問題の周りをクリックしながら、あなたが誤って新しいセッションを作成しているということであることを想像してみてください。古いセッションがまだ存在しますが、それを使用しなくなっている:あなたはセッションのシャットダウンイベントを取得していない理由を説明しないだろう。私はあなたが要求ごとにセッションIDをプリントアウトし、それが変わるかどうかを確認することをお勧めします。
セッションCookieが期限切れになるので、またはあなたはURLエンコードいくつかのリンクではないので(HttpServletResponse.encodeURLを参照)、または、あなたのアプリケーションのコンテキスト・パスの外にナビゲートしているので、あなたはセッションを失うことがあります。
他のヒント
LiftRulesに設定されたセッションの有効期限は何ですか?