0

请告知在 Liftweb 中使用 AJAX 和 Comet 时如何设置会话关闭的最佳方法。

目前,Comet 和 Ajax 连接的连续请求如果超过 2 分钟并且会话未关闭,即使用户未处于活动状态,也会重置超时。

4

2 回答 2

1

由于 Lift 实现了长轮询作为其彗星支持的一部分,因此服务器无法轻松区分没有活动的用户和用户的浏览器只是发出轮询请求。如果他们关闭页面,会话将正常超时。

就我个人而言,不超时通常会更好,因为如果用户离开但保持页面打开,他们不会超时(当他们正在处理某事时特别有用)。但是每个人的要求都不一样。

我认为最简单的做法是使用 javascript 库来检测一段时间的不活动,然后向服务器发送请求以结束会话。我敢肯定还有其他人,但我在谷歌搜索时发现了这个: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,用户就会被注销。

于 2013-09-26T13:52:58.740 回答
0

我认为这是指您的“Web 应用程序容器”,例如jettyor tomcat。您应该在那里指定会话超时。

(您可以从 Lift 内部进行硬会话重置,清除所有 cookie 和分配的内存,但我认为最好按照我首先描述的方式解决问题。)

于 2013-09-26T11:13:51.120 回答