Scala, Lift и SessionVar, которые теряют свое содержимое

StackOverflow https://stackoverflow.com/questions/2052682

  •  20-09-2019
  •  | 
  •  

Вопрос

У меня есть 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?

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top