每天在同一时间使所有活动会话过期



对于我正在制作的Java JSP Web应用程序,我将一个对象保留在会话中。如果有多个用户登录到该站点,每个用户都在自己的会话中,我希望所有会话(无论他们何时开始)在同一天午夜到期。

例如:

会话对象 1:创建日期 (2012-12-11

8:45)、到期日期 (2012-12-12 0:00)

会话对象 2:创建日期 (2012-12-11 12:00

)、到期日期 (2012-12-12 0:00)

依此类推,每天的会话都失效。

我的一些想法是

  • 将会话到期前的时间设置为(下一个午夜 - 当前日期),尽管我对自己在预测上执行此操作的能力并不完全有信心
  • 安排某种服务器任务以清除每天午夜的所有会话
最好的

方法是什么?

我看到的最好的方法是选项 2

  1. 实现 HttpSessionListener - http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpSessionListener.html - 这将帮助您使用回调方法 sessionCreated() 和 sessionDestroy() 收集集合中的活动会话。
  2. 使用计时器任务 - http://docs.oracle.com/javase/6/docs/api/java/util/TimerTask.html,该在午夜运行并关闭您收集的所有活动会话。

选项 1 也是可能的,但可能有点不可预测,因为每次创建新会话时都必须设置精确的超时。

玩得愉快!

在当天结束时设置会话的到期日期:

Calendar today = Calendar.getInstance();
today.set(Calendar.HOUR_OF_DAY, 23);
today.set(Calendar.MINUTE, 59);
today.set(Calendar.SECOND, 59);
Date expiration = today.getTime();

最新更新