【问题标题】:Play framework 2 identify users with timed out sessionPlay framework 2 识别会话超时的用户
【发布时间】:2013-10-02 06:08:31
【问题描述】:

我有我的 Play Framework 2.1.2 应用程序,我需要在用户注销或关闭浏览器后执行清理指令。 由于在my other question 中我询问了如何拦截关闭操作,并且我被告知在浏览器中坚持使用 javascript 是不可靠的,我想使用它的服务器端会话超时事件来确认用户已经离开。

所以我想得到的流程和这个差不多:

  1. 用户登录
  2. 会话已创建
  3. 用户使用我的网络应用程序
  4. 用户注销/关闭浏览器 ---> 会话过期
  5. 他不在平台上,所以我可以在数据库上执行一些关于他所做的操作

当会话到期时,我找不到任何方法可以覆盖。有人可以指出我的解决方案吗?

最终,另一种可接受的解决方案是一些定时事件,它反复检查哪些用户不再连接,并对不再连接的用户池执行批量操作。如何做到这一点?

【问题讨论】:

标签: java javascript session session-state playframework-2.1


【解决方案1】:

我还需要一个会话超时,所以我在会话中添加了一个时间戳(记号),并在检查超时后用每个请求更新它。

类似这样的:

// 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/

【讨论】:

    猜你喜欢
    • 2013-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-18
    • 1970-01-01
    • 2012-05-24
    • 1970-01-01
    • 2017-06-17
    相关资源
    最近更新 更多