工大后院

 找回密码
 加入后院

扫一扫,访问微社区

QQ登录

只需一步,快速开始

搜索
查看: 2743|回复: 1

使用HttpSessionBindingListener实现Log记录

[复制链接]
发表于 2007-5-6 01:29 | 显示全部楼层 |阅读模式
在网站中,一般要记录用户是什么时候登入和什么时候登出。对于登录进去时,可以在验证的同时向数据库写入信息,但是用户离开时可能直接关掉浏览器,想记录也记不了。

一般做法可能是从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 后,只要在验证用户登录时写多一些这样的代码:

  1.                         UserSession userSession = new UserSession();
  2.                         userSession.setName(name);
  3.                         userSession.setGroupName("普通会员");
  4.                         userSession.setIp(ip);
  5.                         req.getSession(true).setAttribute(Constants.USER_SESSION,
  6.                                         userSession);
复制代码


一般来说,在用户登录后,我们总要在Session中保存些东西的。

为了快速测试代码,我在web.xml把Session的生命周期为1分钟。
  1.         <session-config>
  2.                 <session-timeout>1</session-timeout>
  3.         </session-config>
复制代码


只要是和在线离线相关的,似乎都可以用这个方法。但是第一次用HttpSessionBindingListener这个接口,也不知道会有什么副作用。


去百度找下相关资料,再去谷歌搜一下。
闪人!

[ 本帖最后由 powerwind 于 2007-5-6 01:32 编辑 ]
 楼主| 发表于 2007-5-6 02:01 | 显示全部楼层
从百度和谷歌中回来,发现HttpSessionBindingListener用得还不算少,有人专门用来记录在线人数,有人用来保存数据库连接(多人的话一定出问题),有人用来防止用户重复登录。但不管怎样,都是用到它在Session生效失效或属性变化时触发事件的特性。

不好的地方就是有人说,WEB容器不能做到100%保证HttpSessionBindingListener的事件都正确触发。

评分

1

查看全部评分

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 加入后院

本版积分规则

QQ|Archiver|手机版|小黑屋|广告业务Q|工大后院 ( 粤ICP备10013660号 )

GMT+8, 2025-5-15 13:16

Powered by Discuz! X3.5

Copyright © 2001-2024 Tencent Cloud.

快速回复 返回顶部 返回列表