一,建一个监听类,实现HttpSessionListener,HttpSessionAttributeListener接口
1 package com.ifree.listener; 2 3 import java.util.Date; 4 import java.util.HashMap; 5 import java.util.Map; 6 7 import javax.servlet.http.HttpSession; 8 import javax.servlet.http.HttpSessionAttributeListener; 9 import javax.servlet.http.HttpSessionBindingEvent; 10 import javax.servlet.http.HttpSessionEvent; 11 import javax.servlet.http.HttpSessionListener;19 20 public class HihSoftSessionListener implements HttpSessionListener,HttpSessionAttributeListener{ 21 22 /** 23 * 存放所有的session对象索引 24 */ 25 public static final Map<String, HttpSession> allSessions=new HashMap<String,HttpSession>(); 26 27 /** 28 * Session创建时触发 29 */ 30 public void sessionCreated(HttpSessionEvent se) { 31 32 } 33 /** 34 * Session销毁时触发 35 */ 36 public void sessionDestroyed(HttpSessionEvent se) { 37 if(allSessions.containsKey(se.getSession().getId())){39 allSessions.remove(se.getSession().getId()); 40 } 41 } 42 /** 43 * 往session中绑定数据时触发 44 */ 45 public void attributeAdded(HttpSessionBindingEvent se) { 46 if(se.getName()==Const.SESSION_USER){//当绑定数据的名称是Const.SESSION_USER时,表示登录56 allSessions.put(se.getSession().getId(), se.getSession()); 57 } 58 } 59 /** 60 * 移除session中的绑定数据时触发 61 */ 62 public void attributeRemoved(HttpSessionBindingEvent se) { 63 if(se.getName()==Const.SESSION_USER){//当绑定数据的名称是Const.SESSION_USER时,表示退出登录65 allSessions.remove(se.getSession().getId()); 66 } 67 } 68 69 public void attributeReplaced(HttpSessionBindingEvent se) { 70 71 } 72 73 }
二、在web.xml中引用这个监听类
1 <listener> 2 <listener-class>com.ifree.listener.HihSoftSessionListener</listener-class> 3 </listener>
这样就可以动会话进行监听了。
获取客户端IP地址的方法为:String ip=InetAddress.getLocalHost().getHostAddress();