当会话即将超时时,可以使用哪种方法让容器通知您的应用程序?(选择所有适用的方法)
一个。 HttpSessionListener.sessionDestroyed - 正确
B中。 HttpSessionBindingListener.valueBound
℃。 HttpSessionBindingListener.valueUnbound - 更正这是一种圆形但是如果你有一个属性类,这是一种通知超时的方法
d。 HttpSessionBindingEvent.sessionDestroyed - 没有这样的方法
电子。 HttpSessionAttributeListener.attributeRemoved - 删除属性与会话超时没有紧密关联
F。 HttpSessionActivationListener.sessionWillPassivate - 会话钝化不同于超时
我同意选项A.
1)但是C值得怀疑
如何将未绑定值与会话超时紧密耦合。这只是删除属性时的回调方法。
2)如果C是正确的,E也应该是正确的。
HttpSessionAttributeListener只是一个想知道何时在会话中添加,删除或替换任何类型的属性的类。它由任何类实现。
HttpSessionBindingListener存在,以便属性本身可以找出何时添加到会话或从会话中删除,属性类必须实现此接口才能实现它。
任何想法......
答案 0 :(得分:0)
我对此问题的解决方案是使用A.请记住,在会话失效之前调用HttpSessionListener.sessionDestroyed()
,因此其所有属性都是完整的。
我们的应用程序使用带有键"LOGOUT"
的会话属性来表示显式注销。所以你的代码看起来像这样:
public void sessionDestroyed(HttpSessionEvent se) {
Object logout = se.getSession().getAttribute("LOGOUT");
String username = (String)se.getSession().getAttribute("USERNAME");
auditLog.info("User '" + username + "' " +
(logout == null ? "timed" : "logged") +
" out.");
}
据我所知,没有标准方法可以告诉HttpSession
它为什么要失效,令人惊讶的是,HttpSessionEvent
对象中没有任何信息可以描述事件是(直到Java EE 6为止)。