无法在这里找到适合我情况的解决方案。很抱歉,如果之前已经回答过,但我找不到适合我的那个。
问题:尝试测试用户会话是否处于活动状态的时间超过超时限制。
我正在尝试使用会话开始时间和当前系统时间并减去它们,如果结果大于超时var,则终止会话。
所以:
for (LogSession logSession : sessionLogList) {
Calendar sessionStartTime = logSession.getStartTime();
Calendar currentSysTime = Calendar.getInstance();
currentSysTime.setTime(currentSysTime.getTime());
Calendar activeTime = Calendar.getInstance();
activeTime.setTime(sessionStartTime.getTime());
activeTime.add(activeTime.getTime(), - currentSysTime.getTime());
if ( activeTime.getTime() > timeoutLimit) {
// Do something
}
}
我显然在activeTime.add行上收到错误消息,但我不确定这里需要的方法。任何帮助都会非常感谢。
超时当前设置为15分钟,但是可以更改的全局变量。
答案 0 :(得分:3)
阅读API,在calendar.add方法中声明您需要特定于您要添加的字段。 实施例
calendar.add(Calendar.HOUR, 24);
但你有点不需要使用日历操作。
只需减去curentTimeInMillis与以毫秒为单位的开始时间,如果更大(以毫秒为单位),那么你的超时就会得到答案
long refTime = System.currentTimeMillis();
long now = System.currentTimeMillis();
if ( now - refTime > TIMEOUT ) {
... }
答案 1 :(得分:1)
for (LogSession logSession : sessionLogList) {
Calendar sessionStartTime = logSession.getStartTime();
Long now = System.currentTimeMillis();
if (now - sessionStartTime.getTimeInMillis() > timeoutLimit) {
// Do something
}
}
答案 2 :(得分:1)
你的样本中似乎有一些错误,但这就是我要采取的方法。
Calendar sessionEndTime = logSession.getStartTime();
sessionEndTime.add(Calendar.MINUTE, TIMEOUT_MINS);
Calendar currentSysTime = Calendar.getInstance();
if (currentSysTime.after(sessionEndTime)) {
//do something
}
答案 3 :(得分:0)
如果您比较会话开始时间和当前时间,结果将是每个会话都有一个最大年龄,并将重置无活动。
您需要logSession
对象中最后一次活动时间的属性,并使用该属性与当前时间进行比较。如果这些时间是简单的long
字段并分配了System.currentTimeMilis()
,则您不需要Calendar
算术。
答案 4 :(得分:0)
我假设您在某个Web容器中并且可以使用web.xml。你不能使用标准吗?
<session-config>
<session-timeout>30</session-timeout>
</session-config>