Scala и Lift и SessionVar, которые теряют содержимое - PullRequest
1 голос
/ 13 января 2010

У меня есть SessionVar в Lift:

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. Я использую 1.1-SNAPSHOT Лифта. Я не создаю явно какой-либо cookie или сеанс.

Есть идеи, что происходит? Возможно, сессия истекает или становится недействительной, но почему и кем?

Я даже пытался отключить liftGC с помощью (LiftRules.enableLiftGC = false), но это не влияет.

Ответы [ 2 ]

2 голосов
/ 13 января 2010

Я предполагаю, что проблема в том, что, щелкая вокруг, вы случайно создаете новую сессию.Это объясняет, почему вы не получаете событие завершения сеанса: старый сеанс все еще существует, но вы его больше не используете.Я предлагаю вам распечатать идентификатор сеанса с каждым запросом и посмотреть, меняется ли он.

Возможно, вы теряете сеанс, потому что срок действия файла cookie сеанса истекает, или потому что вы не кодируете URL-адреса некоторых ссылок (см.HttpServletResponse.encodeURL) или потому что вы переходите за пределы контекстного пути вашего приложения.

1 голос
/ 13 января 2010

Какое время истечения сеанса установлено в LiftRules?

...