Java 每天同时终止所有活动会话
对于我正在制作的JavaJSPWeb应用程序,我在会话中保留一个对象。 如果有多个用户登录到该站点,每个用户都在自己的会话中,我希望所有会话(无论何时开始)在同一天午夜到期 例如: 会话对象1:创建日期(2012-12-11 8:45),到期日期(2012-12-12 0:00) 会话对象2:创建日期(2012-12-11 12:00)、到期日期(2012-12-12 0:00) 如此类推,每天的会话都会失效 我的一些想法是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) 如此类推,每天的会话都会失效 我的一些想法是 将会话到期前的时间设置为(下一个午夜-当前日期),尽管我对自己是否有
- 将会话到期前的时间设置为(下一个午夜-当前日期),尽管我对自己是否有能力按计划完成这项工作并不完全有信心
- 安排某种服务器任务,每天午夜清除所有会话
最好的方法是什么?在当天结束时设置会话的到期日期:
Calendar today=Calendar.getInstance();
today.set(Calendar.HOUR\u OF_DAY,23);
今天。设定(日历。分钟,59);
今天。设定(日历秒,59);
Date expiration=today.getTime();
我认为最好的办法是选择2
玩得开心 “可能有点不可预测,因为每次创建新会话时都必须设置一个精确的超时。”您能否解释一下为什么这会导致不可预测的行为?每次遇到会话请求时。你必须找出“请求时间”和“一天结束时间”之间的区别。假设您将使用得到的差值,单位为毫秒(长)。然后以秒为单位使用(int)。因此,我觉得可能会有一些不可预测的结果。我无法清楚地量化可预测性的损失。如果您进行了实验,请务必发布结果。在Java EE web应用程序中使用
TimerTask
,该应用程序本应在整个生命周期内运行,但从长远来看,这会导致严重的问题!而是使用容器管理的调度器或ScheduledExecutorService
。