我有我的Play Framework 2.1.2应用程序,我需要在用户注销或关闭浏览器后执行清理指令。 因为在my other question中我问如何拦截结束动作并且我被告知在浏览器中坚持使用javascript是不可靠的,我想使用它的服务器端会话超时事件来确认用户已经离开。
因此,我想获得的流程与此类似:
当会话到期时,我找不到任何方法来覆盖。有人能指出我的解决方案吗?
最终,另一个可接受的解决方案是一些定时事件,它会反复检查哪些用户不再连接,并对不再连接的用户池执行批量操作。怎么做到这一点?
答案 0 :(得分:1)
我还需要一个会话超时,所以我在会话中添加了一个时间戳(tick),并在检查超时后对每个请求进行了更新。
这样的事情:
// see if the session is expired
String previousTick = session("userTime");
if (previousTick != null && !previousTick.equals("")) {
long previousT = Long.valueOf(previousTick);
long currentT = new Date().getTime();
long timeout = Long.valueOf(Play.application().configuration().getString("sessionTimeout")) * 1000 * 60;
if ((currentT - previousT) > timeout) {
// session expired
session().clear();
return null;
}
}
// update time in session
String tickString = Long.toString(new Date().getTime());
session("userTime", tickString);
http://www.poornerd.com/2014/04/01/how-to-implement-a-session-timeout-in-play-framework-2/