Scala, Lift и SessionVar, которые теряют свое содержимое
Вопрос
У меня есть SessionVar в Lift:
object MyObject {
object myVar extends SessionVar[Box[MyObject]](Empty)
}
Затем я один раз установил значение для myVar:
MyObject.myVar(Full(value))
Моя проблема в том, что через некоторое время (1-5 минут) myVar потеряет свое значение, то есть снова будет иметь значение Empty.Это не связано с бездействием, поскольку я постоянно просматриваю страницы.Мой код не устанавливает значение Empty.В течение этих 1–5 минут myVar будет работать правильно.Журналы не содержат связанных сообщений.
Я попытался добавить метод завершения работы в myVar, но он не вызывается.
override protected def onShutdown(session: CleanUpParam): Unit = {
Log.error("shutdown executed")
}
Я использую лифт на пристани через mvn jetty:run
команда.Я использую 1.1-SNAPSHOT Lift.Я не создаю явным образом какие-либо файлы cookie или сеансы.
Есть идеи, что происходит?Возможно, сессия каким-то образом истечет или станет недействительной, но почему и кем?
Я даже пытался отключить LiftGC с помощью (LiftRules.enableLiftGC = false
) но это не влияет.
Решение
Я предполагаю, что проблема в том, что, щелкая мышью, вы случайно создаете новый сеанс.Это объясняет, почему вы не получаете событие завершения сеанса:старый сеанс все еще существует, но вы его больше не используете.Я предлагаю вам распечатать идентификатор сеанса при каждом запросе и посмотреть, изменится ли он.
Вы можете потерять сеанс, потому что срок действия файла cookie сеанса истекает, или потому, что вы не кодируете URL-адрес некоторых ссылок (см. HttpServletResponse.encodeURL), или потому, что вы переходите за пределы контекстного пути вашего приложения.
Другие советы
Какое время окончания сеанса установлено в LiftRules?