采取HttpSessionListener接口窃听器Session的生成和失效版权声明

原创
小哥 3年前 (2022-10-28) 阅读数 149 #大杂烩

HttpSessionListener :

Session创建事件在每次新的session创建,类似地Session故障事件一次发生。Session当它失败时。

此接口还仅包含两个方法,分别对应Session创建和失效:

public void sessionCreated(HttpSessionEvent se);

public void sessionDestroyed(HttpSessionEvent se);

我的web我想知道有多少用户在使用它?

网站经常需要提供上网人数的统计数据。过去,一般的做法是登录和退出功能相结合,即当用户输入用户名和密码进行登录时,会添加计数器1然后,当用户单击退出按钮退出系统时,计数器递减。1。这种处理方式有一些缺点,比如用户正常登录后,可能会忘记点击退出按钮,直接关闭浏览器,导致计数器减少。1手术没有及时进行。网站上经常有一些无需登录就可以访问的内容,在这种情况下,上述方法不能用于在线人口统计。
我们可以利用这个机会Servlet规范中定义的事件侦听器(Listener)解决这一问题,实现更精准的网上人数清点功能。对于每个被访问的用户,J2EE所述应用服务器建立对应的HttpSession物体。当浏览器第一次访问网站时,J2EE应用程序服务器创建一个新的服务器。HttpSession对象 ,并触发 HttpSession创建事件 ,如果已注册HttpSessionListener事件侦听器,它调用HttpSessionListener事件侦听器的sessionCreated方法。相反,当浏览器访问结束并超时时,J2EE应用服务器将销毁相应的HttpSession对象,触发 HttpSession销毁事件并调用已注册的HttpSessionListener事件侦听器的sessionDestroyed方法。

Java代码

  1. import javax.servlet.http.HttpSessionListener;

  2. import javax.servlet.http.HttpSessionEvent;

  3. public class SessionCounter implements HttpSessionListener {

  4. private static int activeSessions =0;

  5. / Session创建事件 /

  6. public void sessionCreated(HttpSessionEvent se) {

  7. ServletContext ctx = event.getSession( ).getServletContext( );

  8. Integer numSessions = (Integer) ctx.getAttribute("numSessions");

  9. if (numSessions == null) {

  10. numSessions = new Integer(1);

  11. }

  12. else {

  13. int count = numSessions.intValue( );

  14. numSessions = new Integer(count + 1);

  15. }

  16. ctx.setAttribute("numSessions", numSessions);

  17. }

  18. / Session失效事件 /

  19. public void sessionDestroyed(HttpSessionEvent se) {

  20. ServletContext ctx=se.getSession().getServletContext();

  21. Integer numSessions = (Integer)ctx.getAttribute("numSessions");

  22. <span class="oblog_text">        if(numSessions == null)

  23. numSessions = new Integer(0);

  24. }

  25. else {

  26. int count = numSessions.intValue( );

  27. numSessions = new Integer(count - 1);

  28. }

  29. ctx.setAttribute("numSessions", numSessions);

  30. }

  31. }

在此解决方案中,任何一个Session在创建或销毁时通知。SessionCounter 当然,这一类通知的原因是它必须在。web.xml在文件中进行相关配置工作。以下是配置代码:

Java代码

  1. demo.listener.SessionCounter

在两种情况下都发生sessionDestoryed(会话销毁)事件:
1.执行session.invalidate()方法时 。
既然LogoutServlet.java中执行session.invalidate()在以下情况下触发sessionDestory()来自在线用户 清除列表中的当前用户,我们没有LogoutServlet.java在网上榜单操作中,所以。LogoutServlet.java内容现在是 这样。

Java代码

  1. public void doGet(HttpServletRequest request,HttpServletResponse response)

  2. throws ServletException, IOException {

  3. // 销毁session

  4. request.getSession().invalidate();

  5. // 成功

  6. response.sendRedirect("index.jsp");

  7. }

  8. 如果用户很长时间没有访问服务器,则会超过最大会话超时。 ,服务器将自动销毁超时session。
    会话超时可以是web.xml为了更容易地看到超时效果,我们将超时设置为最小值。

Java代码

  1. 1

时间单位为一分钟,只能为整数。如果为零或负,则会话永远不会超时。

2.HttpSessionEvent

这是一个表示web在应用程序内更改会话事件通知。

Java代码

  1. public class ShopSessionListener implements HttpSessionListener {

  2. public void sessionCreated(HttpSessionEvent se) {

  3. }

  4. public void sessionDestroyed(HttpSessionEvent se) {

  5. String sessionid = se.getSession().getId();

  6. EopSite site  =(EopSite)ThreadContextHolder.getSessionContext().getAttribute("site_key");

  7. if(site!=null){

  8. ICartManager cartManager = SpringContextHolder.getBean("cartManager");

  9. cartManager.clean(sessionid,site.getUserid(),site.getId());

  10. }

  11. }

  12. }

se.getSession().getId();

HttpSession 接口中的getId():

Returns a string containing the unique identifier assigned to this session.

返回一个字符串,该字符串包含分配给此会话的唯一标识符。

版权声明

所有资源都来源于爬虫采集,如有侵权请联系我们,我们将立即删除

热门