2013-09-26 2 views
0

Просьба сообщить, как лучше всего настроить закрытие сеанса при работе с AJAX и Comet в Liftweb.Как закрыть сеанс бездействия пользователя в Liftweb при использовании AJAX и кометы

В настоящее время запросы сокетов Comet и Ajax в автономном режиме сбрасывают таймаут, если он превышает 2 минуты, а сеанс не закрыт, даже если пользователь не активен.

ответ

1

С 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 на некоторый период бездействия, и пользователь будет выведен из системы.

0

Я думаю, что это скорее относится к вашему «контейнеру для веб-приложений», например jetty или tomcat. Вы должны указать время ожидания сеанса.

(Вы может сделать жесткий сброс сеанса внутри Lift, очищая все куки и распределенную память, но я думаю, что лучше, чтобы решить эту проблему, как я описал первый.)

Смежные вопросы