在这个网站上,我需要一个系统,在10分钟后将用户注销。
为了登录,我使用插入用户(在我的情况下称为Lid
)实例的简单过程,并且当用户登录计时器中的时间任务时,注销使会话无效,并且在10之后分钟使会话无效。
以下是代码:
MyTask task = null;
private void setCurrent(String key, Object o) {
getRequest().getSession().setAttribute(key, o);
}
private <T> T getCurrent(String key) {
T value = (T) getRequest().getSession().getAttribute(key);
return value;
}
public void logIn(Lid lid) {
setCurrent("lid", lid);
Timer timer = new Timer();
task = new MyTask(getRequest().getSession());
System.out.println(task.toString());
timer.schedule(task,10*60*1000);
}
public void logOut() {
task.cancel();
getRequest().getSession().invalidate();
}
这是MyTask代码:
public class MyTask extends TimerTask {
HttpSession session = null;
public MyTask(HttpSession session) {
this.session=session;
}
@Override
public void run() {
session.invalidate();
}
}
问题在于,当我自愿注销时,它会抛出异常,因为它表示task
变量为null
,因此无法调用cancel()
task
变量。
但是我没有得到它,在实例化登录变量后,它不是null
。
你对此有什么建议吗? 谢谢
答案 0 :(得分:1)
为什么不让Web容器为您处理会话超时?如果您在web.xml中放入以下代码,则所有非活动会话将在10分钟后过期:
<session-config>
<session-timeout>10</session-timeout>
</session-config>