透過實作 javax.servlet.http.HttpSessionListener 介面,在 Session 建立與銷毀時分別遞增/遞減計數器,即可即時掌握當前活躍 Session 數量,作為「線上人數」的近似值。
package SessionCount;
import javax.servlet.*;
import javax.servlet.http.*;
public class SessionCounter implements HttpSessionListener {
private static int activeSessions = 0;
public void sessionCreated(HttpSessionEvent se) {
activeSessions++;
}
public void sessionDestroyed(HttpSessionEvent se) {
if (activeSessions > 0) activeSessions--;
}
public static int getActiveSessions() {
return activeSessions;
}
}
將編譯後的 SessionCounter.class 放入 Web 應用的 WEB-INF/classes/SessionCount/ 目錄下。
<%@ page import="SessionCount.SessionCounter" %>
<html><body>
目前線上人數: <%= SessionCounter.getActiveSessions() %>
</body></html>
在 WEB-INF/web.xml 中加入:
<listener>
<listener-class>SessionCount.SessionCounter</listener-class>
</listener>
存取 online.jsp 即可看到即時線上人數。注意:此計數方式僅統計有效 Session,若使用者關閉瀏覽器而未登出,Session 會在逾時後才被銷毀,數字可能略高於實際線上人數。