Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 每天同时终止所有活动会话_Java_Jsp_Session_Servlets - Fatal编程技术网

Java 每天同时终止所有活动会话

Java 每天同时终止所有活动会话,java,jsp,session,servlets,Java,Jsp,Session,Servlets,对于我正在制作的JavaJSPWeb应用程序,我在会话中保留一个对象。 如果有多个用户登录到该站点,每个用户都在自己的会话中,我希望所有会话(无论何时开始)在同一天午夜到期 例如: 会话对象1:创建日期(2012-12-11 8:45),到期日期(2012-12-12 0:00) 会话对象2:创建日期(2012-12-11 12:00)、到期日期(2012-12-12 0:00) 如此类推,每天的会话都会失效 我的一些想法是 将会话到期前的时间设置为(下一个午夜-当前日期),尽管我对自己是否有

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

例如:

会话对象1:创建日期(2012-12-11 8:45),到期日期(2012-12-12 0:00)

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

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

我的一些想法是

  • 将会话到期前的时间设置为(下一个午夜-当前日期),尽管我对自己是否有能力按计划完成这项工作并不完全有信心
  • 安排某种服务器任务,每天午夜清除所有会话

最好的方法是什么?

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

Calendar today=Calendar.getInstance();
today.set(Calendar.HOUR\u OF_DAY,23);
今天。设定(日历。分钟,59);
今天。设定(日历秒,59);
Date expiration=today.getTime();

我认为最好的办法是选择2

  • 实现HttpSessionListener--这将帮助您使用回调方法sessionCreated()和sessionDestroyed()收集集合中的活动会话
  • 使用TimerTask-它每午夜运行一次,并关闭您收集的所有活动会话
  • 选项1也是可能的,但可能有点不可预测,因为每次创建新会话时都必须设置精确的超时


    玩得开心

    “可能有点不可预测,因为每次创建新会话时都必须设置一个精确的超时。”您能否解释一下为什么这会导致不可预测的行为?每次遇到会话请求时。你必须找出“请求时间”和“一天结束时间”之间的区别。假设您将使用得到的差值,单位为毫秒(长)。然后以秒为单位使用(int)。因此,我觉得可能会有一些不可预测的结果。我无法清楚地量化可预测性的损失。如果您进行了实验,请务必发布结果。在Java EE web应用程序中使用
    TimerTask
    ,该应用程序本应在整个生命周期内运行,但从长远来看,这会导致严重的问题!而是使用容器管理的调度器或
    ScheduledExecutorService