说明:实现开发人员自己管理session的有效期,不需要系统管理。功能1:把所有的session放入集合中。功能2:遍历集合中每个session, 判断session有多长时间没有访问了,如果超过规定时长就把session失效。
/*
* yxl 2019/9/7 10:32
* 佛祖保佑,永无BUG!
*/
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener;
import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
import java.util.*;
@WebListener()
public class SessionManagerListener implements ServletContextListener,HttpSessionListener{
private List<HttpSession> sessions;
private Timer timer;
public void contextInitialized(ServletContextEvent sce) {
//初始化
sessions= Collections.synchronizedList(new LinkedList<>());
timer=new Timer();
//指定任务
timer.schedule(new TimerTask() {
@Override
public void run() {
//遍历sessions
synchronized (sessions){
Iterator<HttpSession> it = sessions.iterator();
while(it.hasNext()){
HttpSession session = it.next();
if((System.currentTimeMillis()-session.getLastAccessedTime())>60000){
//session失效
session.invalidate();
System.out.println("删除了session:"+session.getId());
it.remove();
}
}
}
}
}, 0, 10000);
}
public void contextDestroyed(ServletContextEvent sce) {
timer.cancel();//去掉定时任务
}
public void sessionCreated(HttpSessionEvent se) {
System.out.println("会话创建了..."+se.getSession().getId());
sessions.add(se.getSession());
}
public void sessionDestroyed(HttpSessionEvent se) {
}
}