通過HttpSessionListener記錄用戶訪問時間
系統
1871 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元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元