每天同时过期所有活动会话

时间:2012-12-11 09:46:10

标签: java jsp session servlets

对于我正在制作的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 个答案:

答案 0 :(得分: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每隔午夜运行一次,并关闭您收集的所有活动会话。
  3. 选项1也是可能的,但可能有点不可预测,因为每次创建新会话时都必须设置精确的超时。

    玩得开心!

答案 1 :(得分: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();