学习session监听器

监听器跟踪Session

session监听器可以用来统计用户在线时长,监听session对象创建和关闭的

1. 监听属性对象的创建和关闭
方法:创建一个实现HttpSessionAttriburteListener接口的监听器,然后在部署描述文件重注册该类。

注:servlet API提供了javax.servlet.http.HttpSessionAttriburteListener接口,该接口定义了三个方法:attributeAdded(), attributeRemove(),attributeReplace(), 三个方法都接受一个HttpSessionBingdingEvent类型参数。(实现类要提供一个无参数的构造函数)。

public class SessionAttributeListener implements HttpSessionAttributeListener{

public void attributeAdded(HttpSessionBindingEvent httpSessionBindingEvent) {
		//Session创建时执行
		System.out.println("添加属性名:"+httpSessionBindingEvent.getName()+" 属性值"+httpSessionBindingEvent.getValue());
	}

	public void attributeRemoved(HttpSessionBindingEvent httpSessionBindingEvent) {
		//Session销毁时执行
		System.out.println("删除属性名:"+httpSessionBindingEvent.getName()+" 属性值"+httpSessionBindingEvent.getValue());	
	}

	public void attributeReplaced(HttpSessionBindingEvent httpSessionBindingEvent) {
		//修改时执行
	}
	
	

}

我在项目中登录时创建有session,主界面注销时使用到request.getSession().invalidate();释放session。

web. xml文件配置

 <listener>
  <listener-class>com.java.listener.SessionAttributeListener</listener-class>
  </listener>
`

使用监听器跟踪session的生命周期统计用户在线时长

方法:创建一个实现HttpSessionListener接口的监听器,然后在部署描述文件重注册该类。

注:servlet API提供了javax.servlet.http.HttpSessionListener接口,用来响应会话创建和销毁。该接口定义了两个方法:sessionCreated()和sessionDestoryed(),每个方法都接受一个HttpSessionEvent参数。



 public class SessionListener  implements HttpSessionListenter {



               public SessionListener() { };

              public void sessionCreated(HttpSessionEvent event) {

                 //代码  

                 } 

           public void sessionDestoryed(HttpSessionEvent event) {

                 //代码  

                 } 

}
最后在web.xml注册该监听器

 

 <listener>

        <listener-class>com.java.listener.SessionListener></listener-class>
```

追加

删除 Session 会话数据 当您完成了一个用户的 session 会话数据,您有以下几种选择:

  1. 移除一个特定的属性:您可以调用 public void removeAttribute(String name)方法来删除与特定的键相关联的值。 删除整个 session 会话:您可以调用 public void invalidate()方法来丢弃整个 session 会话。
  2. 设置 session 会话过期时间:您可以调用 public void
    setMaxInactiveInterval(int interval) 方法来单独设置 session 会话超时。
    注销用户:如果使用的是支持 servlet 2.4 的服务器,您可以调用 logout 来注销 Web(自己项目使用该方法)服务器的客户端,并把属于所有用户的所有 session 会话设置为无效。
    web.xml 配置:如果您使用的是Tomcat,除了上述方法,您还可以在 web.xml 文件中配置 session 会话超时,如下所示:
    <session-config>
    <session-timeout>15</session-timeout>  
    </session-config>

上面实例中的超时时间是以分钟为单位,将覆盖 Tomcat 中默认的 30 分钟超时时间。
在一个 Servlet 中的 getMaxInactiveInterval() 方法会返回 session会话的超时时间,以秒为单位。所以,如果在 web.xml 中配置 session 会话超时时间为 15 分钟,那么
getMaxInactiveInterval() 会返回 900。

session的使用案例(追加学习):
1.菜鸟教程session追踪器案例
https://www.runoob.com/servlet/servlet-session-tracking.html
2.监听 session 判断用户是否在线
https://blog.csdn.net/qq_35425070/article/details/89205609
3.自定义session扫描器和统计在线用户人数及用户信息
https://blog.csdn.net/a15920804969/article/details/78532947

发布了4 篇原创文章 · 获赞 0 · 访问量 36

猜你喜欢

转载自blog.csdn.net/qq_43640120/article/details/105201624
今日推荐