利用session獲取網站線上人數
阿新 • • 發佈:2020-12-09
技術標籤:javaWebjavasessionservletweb
什麼是Session
Session對應的中文翻譯是會話。
會話指的是從使用者開啟瀏覽器訪問一個網站開始,無論在這個網站中訪問了多少頁面,點選了多少連結,都屬於同一個會話。 直到該使用者關閉瀏覽器為止,都屬於同一個會話。
HTTP協議是短連結的,所以無法在服務端根據建立了多少連線來統計當前有多少人線上。 不過可以通過統計session有多少來估計線上人數。
一旦一個使用者訪問伺服器,就會建立一個session. 如果該使用者持續訪問,那麼該session會持續有效。
如果經歷了30分鐘,該使用者也沒有做任何操作,就表示該使用者“下線” 了,其對應的session也會被銷燬。
所以可以通過統計有多少session被保留來估計當前線上人數。
PeopleLisened.java
package com.chenchangjie.listener;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
public class PeopleListener implements HttpSessionListener {
/**
* 監聽session建立
* @param se
*/
@Override
public void sessionCreated(HttpSessionEvent se) {
ServletContext context = se.getSession().getServletContext();
Integer num = (Integer) context.getAttribute("online_num");
if(num == null)
num = 0;
++num;
context.setAttribute ("online_num",num);
System.out.println("新增一位使用者...");
}
/**
* 監聽session銷燬
* @param se
*/
@Override
public void sessionDestroyed(HttpSessionEvent se) {
ServletContext context = se.getSession().getServletContext();
Integer num = (Integer) context.getAttribute("online_num");
if(num == null)
num = 0;
else
--num;
context.setAttribute("online_num",num);
System.out.println("減少一位使用者...");
}
}
web.xml新增配置
<listener>
<listener-class>com.chenchangjie.listener.PeopleListener</listener-class>
</listener>
test.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
${online_num}
</body>
</html>
開一個就會增加,關一個重新整理就會減少