С Lift реализует long polling как часть его кометной поддержки, сервер не может легко различать пользователя, не имеющего активности, и браузера пользователя, просто делая запрос на опрос. Если они закроют страницу, сессия будет нормально работать.
Для меня лично не время от времени обычно лучше, так как, если пользователь уходит, но оставляет страницу открытой, они не теряют время (особенно полезно, когда они находятся в середине работы над чем-то). Но все требования разные.
Я думаю, что проще всего было бы использовать библиотеку javascript для обнаружения периода бездействия, а затем отправить запрос на сервер для завершения сеанса. Я уверен, что есть и другие, но я нашел это во время поиска в Google: http://www.paulirish.com/2009/jquery-idletimer-plugin/ и кажется довольно простым в настройке.
Насколько имея сервер обработки запроса, вы можете использовать отправку Lift, чтобы создать URL, который будет прекратить активную сессию, что-то вроде этого в вашем Boot.scala
должно работать:
LiftRules.dispatch.append {
case Req("logout" :: Nil, _, _) =>
S.request.foreach(_.request.session.terminate)
RedirectResponse("/")
}
Доступ /logout
будет аннулировать сеанс, а затем перенаправить пользователя. Таким образом, вам просто нужно, чтобы проблема javascript перенаправлялась на этот URL на некоторый период бездействия, и пользователь будет выведен из системы.