通过HttpSessionListener记录用户访问时间

系统 1719 0
数据表:
    
create table SESSION_LOG
(
  ID                 NUMBER not null,
  SESSION_ID         VARCHAR2(100),
  CREATE_DATE        NUMBER,
  LAST_ACCESSED_DATE NUMBER,
  LOGIN_ID           VARCHAR2(40),
  IP_ADDRESS         VARCHAR2(32)
)

  

web.xml中添加
    
<listener>
    <listener-class>
         org.zju.cdpsn.module.listener.CDPSNSessionListener
    </listener-class>
</listener>

  


监听对象:
    
import javax.servlet.ServletRequestEvent;
import javax.servlet.ServletRequestListener;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;

import org.zju.cdpsn.biz.dao.sessionlog.SessionLogDAO;
import org.zju.cdpsn.biz.dao.sessionlog.dataobject.SessionLog;
import org.zju.cdpsn.module.fm.screen.factory.ScreenFactory;
import org.zju.cdpsn.module.util.ClientUtil;

public class CDPSNSessionListener implements HttpSessionListener,ServletRequestListener {
	
	private HttpServletRequest request;
	
	@Override
	public void sessionCreated(HttpSessionEvent se) {
		// 获取将要删除的session
		HttpSession session = se.getSession();
		// 获取会话表DAO
		SessionLogDAO sessionLogDAO = (SessionLogDAO) GetBeanFactory.getInstance().getBean("sessionLogDAO");
		// 初始化记录对象
		SessionLog record = new SessionLog();
		// 获取ClientIP
		String clientIP = ClientUtil.getClientIp(request);
		record.setIpAddress(clientIP);
		// 获取sessionId
		String sessionId = session.getId();
		record.setSessionId(sessionId);
		// 获取创建时间
		long crtimes = session.getCreationTime();
		record.setCreateDate(crtimes);
		// 更新记录
		sessionLogDAO.insert(record);
	}

	@Override
	public void sessionDestroyed(HttpSessionEvent se) {
		// 获取将要删除的session
		HttpSession session = se.getSession();
		// 获取会话表DAO
		SessionLogDAO sessionLogDAO = (SessionLogDAO) GetBeanFactory.getInstance().getBean("sessionLogDAO");
		// 初始化记录对象
		SessionLog record = new SessionLog();
		// 获取sessionId
		String sessionId = session.getId();
		record.setSessionId(sessionId);
		// 获取最后访问时间
		long latimes = session.getLastAccessedTime();
		record.setLastAccessedDate(latimes);
		// 更新记录
		sessionLogDAO.updateBySessionIdSelective(record);
	}
	

	@Override
	public void requestInitialized(ServletRequestEvent sre) {
		this.request = (HttpServletRequest) sre.getServletRequest();
	}

	@Override
	public void requestDestroyed(ServletRequestEvent sre) {
	}
	
	public void setRequest(HttpServletRequest request) {
		this.request = request;
	}

	public HttpServletRequest getRequest() {
		return request;
	}

}


  


获取Spring beans的工厂对象
    
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;

/**
 * Spring beans工厂类
 * 
 * @author xie
 * @date 2010-05-28
 */
public class GetBeanFactory implements ApplicationContextAware {

	private boolean alreadyInit = false;

	private ApplicationContext appContext;

	private GetBeanFactory() {

	}

	private static class SingletonHolder {
		private static GetBeanFactory factory = new GetBeanFactory();
	}

	/**
	 * 获得工厂静态实例
	 */
	public static GetBeanFactory getInstance() {
		return SingletonHolder.factory;
	}

	/**
	 * 根据名称取得Spring Beans对象
	 * 
	 * @param beanName
	 * @return Spring Beans
	 */
	@SuppressWarnings("unchecked")
	public <T> T getScreenBean(String beanName) {
		if (StringUtils.isBlank(beanName)) {
			return null;
		}
		return (T) appContext.getBean(beanName);
	}

	/**
	 * 设置ApplicationContext
	 */
	public void setApplicationContext(ApplicationContext applicationContext)
			throws BeansException {
		GetBeanFactory getBeanFactory = GetBeanFactory.SingletonHolder.factory;
		if (!getBeanFactory.alreadyInit) {
			getBeanFactory.appContext = applicationContext;
			getBeanFactory.alreadyInit = true;
		}
	}
}

  


用户名在用户登录时候设置,用户登出是清除Session,方法为session.invalidate();
此方法无法记录用户在最后一个页面上的停留时间,无法获取浏览器关闭事件的信息,不过如果只是用于记录注册用户的在线时间还是可以的。

通过HttpSessionListener记录用户访问时间


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论