发布时间:2018-03-22作者:laosun阅读(2772)
如果你想用session统计一个在线人数等功能的话,那么这篇文章你就看对了,可以监听session的创建和销毁,至于其他功能你就可以随意的去写了
session监听可以监听到session的创建和销毁等操作,如果需要去做在线人数统计,那么需要这两个就足够了。
创建session监听类
package com.sunjs.commons; // _ooOoo_ // o8888888o // 88" . "88 // (| -_- |) // O\ = /O // ____/`---'\____ // . ' \\| |// `. // / \\||| : |||// \ // / _||||| -:- |||||- \ // | | \\\ - /// | | // | \_| ''\---/'' | | // \ .-\__ `-` ___/-. / // ___`. .' /--.--\ `. . __ // ."" '< `.___\_<|>_/___.' >'"". // | | : `- \`.;`\ _ /`;.`/ - ` : | | // \ \ `-. \_ __\ /__ _/ .-` / / // ======`-.____`-.___\_____/___.-`____.-'====== // `=---=' // // ............................................. // 佛祖保佑 永无BUG // 佛曰: // 写字楼里写字间,写字间里程序员; // 程序人员写程序,又拿程序换酒钱。 // 酒醒只在网上坐,酒醉还来网下眠; // 酒醉酒醒日复日,网上网下年复年。 // 但愿老死电脑间,不愿鞠躬老板前; // 奔驰宝马贵者趣,公交自行程序员。 // 别人笑我忒疯癫,我笑自己命太贱; // 不见满街漂亮妹,哪个归得程序员? import javax.servlet.http.HttpSessionEvent; import javax.servlet.http.HttpSessionListener; import org.apache.log4j.Logger; /** * session 监听 * @author sun */ public class SessionListener implements HttpSessionListener { protected static final Logger LOG = Logger.getLogger(SessionListener.class); @Override public void sessionCreated(HttpSessionEvent event) { //创建session的时候可以监听到 } @Override public void sessionDestroyed(HttpSessionEvent event) { // HttpSession session = event.getSession(); // String sessionId = session.getId(); //session销毁的时候可以监听到 } }
web.xml 需要配置listener节点
<listener> <listener-class>com.sunjs.commons.SessionListener</listener-class> </listener>
完成,此时session已经可以监听了。
如果你想做一个在线人数统计,那么只需要在创建和销毁的操作内存中的数据即可,redis、memcache或者系统内的map都可以。
我写了个简单的例子
public static final Map<String, MpSession> sessionMap = new HashMap<String, MpSession>();
创建实体pojo MpSession
private TRbacUser user;// 登录用户信息 private String loginTime;// 登录时间 private String totalTime;// 在线时长 private String loginIp;// 登录ip private String sessionId;// session唯一id private HttpSession session;// session信息 //取set get方法
public void sessionDestroyed(HttpSessionEvent event) { HttpSession session = event.getSession(); String sessionId = session.getId(); Set<String> keyset = CommonUtils.sessionMap.keySet(); Iterator<String> it = keyset.iterator(); while (it.hasNext()) { String key = it.next();// 用户名 MpSession mps = CommonUtils.sessionMap.get(key); if (mps != null && !StringUtils.isEmpty(mps.getSessionId())) { if (mps.getSessionId().equals(sessionId)) { // 匹配到cache中存在这个sessionid, 去除 CommonUtils.sessionMap.remove(key);// 内存cache中删除 //记录自动退出日志 break; } } } }
就这么简单,看不明白或者没搞懂的朋友们,可以在下方给我留言!!!
版权属于: 技术客
原文地址: https://www.sunjs.com/article/detail/48e3bd8faf42481bb21e80bba63b840d.html
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。