1

对于我正在制作的 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)

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

我的一些想法是

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

解决此问题的最佳方法是什么?

4

2 回答 2

3

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

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

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

玩得开心 !

于 2012-12-11T10:17:51.613 回答
0

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

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();
于 2012-12-11T10:09:50.317 回答