使用HttpSessionBindingListener实现Log记录
在网站中,一般要记录用户是什么时候登入和什么时候登出。对于登录进去时,可以在验证的同时向数据库写入信息,但是用户离开时可能直接关掉浏览器,想记录也记不了。一般做法可能是从Session中入手,当Session失效时,就记录用户离开。使用HttpSessionBindingListener可以很方便地实现这个简单的功能。
下面是我的简单示例。
import javax.servlet.http.HttpSessionBindingEvent;
import javax.servlet.http.HttpSessionBindingListener;
import org.jvk.dao.LogDAO;
public class UserSession implements HttpSessionBindingListener {
public void valueBound(HttpSessionBindingEvent event) {
new LogDAO().log(name, ip, "登入");
}
public void valueUnbound(HttpSessionBindingEvent event) {
new LogDAO().log(name, ip, "登出");
}
// 用户名
private String name;
// 用户组名
private String groupName;
// 用户IP
private String ip;
/* 省下面一些 getter 和 setter 方法 */
}
有了这个比较特殊的 bean 后,只要在验证用户登录时写多一些这样的代码:
UserSession userSession = new UserSession();
userSession.setName(name);
userSession.setGroupName("普通会员");
userSession.setIp(ip);
req.getSession(true).setAttribute(Constants.USER_SESSION,
userSession);
一般来说,在用户登录后,我们总要在Session中保存些东西的。
为了快速测试代码,我在web.xml把Session的生命周期为1分钟。
<session-config>
<session-timeout>1</session-timeout>
</session-config>
只要是和在线离线相关的,似乎都可以用这个方法。但是第一次用HttpSessionBindingListener这个接口,也不知道会有什么副作用。
去百度找下相关资料,再去谷歌搜一下。
闪人!
[ 本帖最后由 powerwind 于 2007-5-6 01:32 编辑 ] 从百度和谷歌中回来,发现HttpSessionBindingListener用得还不算少,有人专门用来记录在线人数,有人用来保存数据库连接(多人的话一定出问题),有人用来防止用户重复登录。但不管怎样,都是用到它在Session生效失效或属性变化时触发事件的特性。
不好的地方就是有人说,WEB容器不能做到100%保证HttpSessionBindingListener的事件都正确触发。
页:
[1]