Session退出,我监控不到?valueUnbound的使用
我的Session监控类如下:
import javax.servlet.ServletContext;
import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpSessionBindingEvent;
import javax.servlet.http.HttpSessionBindingListener;
import org.apache.log4j.Logger;
import com.haiersoft.core.Globals;
import com.haiersoft.login.vo.LoginBean;
//监听登录的整个过程
public class SessionListener implements HttpSessionBindingListener {
/**日志 */
private static Logger log = Logger.getLogger(SessionListener.class);
public String privateInfo = " ";
public SessionListener(String info) {
this.privateInfo = info;
}
public void valueBound(HttpSessionBindingEvent event) {
if (log.isDebugEnabled()) log.debug(privateInfo+ "-登录 ");
}
public void valueUnbound(HttpSessionBindingEvent event) {
LoginBean loginbean = new LoginBean();
HttpSession session = event.getSession();
// 从session中得到用户bean对象
loginbean = (LoginBean) session.getAttribute(Globals.LOGIN_SESSION);
ServletContext sc=event.getSession().getServletContext();
sc.removeAttribute(loginbean.getGuid());
if (log.isDebugEnabled()) log.debug(privateInfo+ "-退出 ");
}
}
我在直接session.setAttribute()的时候是可以触发valueUnbound的,但是在Session.TimeOut的时候就触发不到valueUnbound方法,想知道缘由,等Session超时的时间实在是太痛苦,做过的帮帮忙吧
[解决办法]
退出销毁session应该使用HttpSessionListener的sessionDestroyed方法啊,
也就是说你应该使用HttpSessionListener接口,
结贴给分吧,谢谢。
[解决办法]
那你是书本看错了,valueUnbound在很多情况都会发生的,session.removeAttribute()就会触发
你应该使用HttpSessionListener,那个才是正确的得到会话超时